На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела "Программирование графики"
1) Данный раздел предназначен для обсуждения проблем, возникающих при программировании задач, связанных с чтением, сохранением, обработкой, созданием, отрисовкой графической информации (в том числе - 3D [OpenGL, Direct3D] и анимации [в т.ч. VFW, DirectShow, OpenDML]).
Флэш обсуждают здесь!.

2) Если вы хотите получить совет для конкретной платформы/языка программирования, обязательно укажите их в вопросе.

3) Уважаемые новички! Мы приветствуем Ваше желание научить всех посетителей раздела правильному программированию. Но огромная просьба, перед тем, как писать поучения в старых (последний ответ - "старее" месяца, а особенно, если вопрошавший не появляется на форуме уже не первый месяц, в чем можно убедиться в его профиле) темах, хорошо подумать, будет ли кому-нибудь, кроме Вас cамих, это интересно.



Ваше мнение о модераторах: user posted imageBarazuk, user posted imageOpenGL, user posted imageMikle
Модераторы: OpenGL, Mikle
  
> Шейдер с получением цвета
    В наличии есть пратикл эмиттр (в отдельном FBO), который генерирует набор партиклов. В частности костёр, выглядит примерно так (прошу прощения за фреймрейт, в реальности он выше):

    Прикреплённая картинка
    Прикреплённая картинка


    Задача, написать шейдер, который проверяет альфу и при alpha, допустим > 0.4 < 0.4 (меньше 0.4) обнуляет её, при 0.4 < alpha < 0.8 (больше .4 и меньше .8) приравнивает её к 0.6, а остальное оставляет как есть. Хочется, чтоб на выходе получился примерно такой вариант:

    Прикреплённая картинка
    Прикреплённая картинка


    Я так понимаю, в случае выполнения хотя бы первого условия должно получиться нечто такое:

    ExpandedWrap disabled
      uniform float u_AlphaGate;
      void main() {
        vec4 clr = ????;
        gl_FragColor = clr.a < 0.4
          ? vec4(0.0, 0.0, 0.0, u_AlphaGate);
          : clr;
      }


    Но проблема в том, что не в курсе как можно получить цвет пикселя (знаки вопроса). Есть идеи куда гуглить?

    Добавлено
    Ах да, GLSL ES, забыл совсем :whistle:
    Сообщение отредактировано: Serafim -
      Цитата Serafim @
      проверяет альфу и при alpha, допустим > 0.4 обнуляет её, при 0.4 < alpha < 0.8 приравнивает её к 0.6
      Наверняка описка в знаке, и имелось ввиду: "при alpha, допустим, < 0.4 обнуляет её". :blush:
        Цитата Славян @
        Наверняка описка в знаке

        угу :yes: конец рабочего дня, сделай скидку, прости :D
          Цитата Serafim @
          Но проблема в том, что не в курсе как можно получить цвет пикселя (знаки вопроса). Есть идеи куда гуглить?
          Зачастую воруют с текстуры:
          ExpandedWrap disabled
            vec3 colour = texture2D(guid,gl_TexCoord[0].xy).xyz;
            gl_FragColor = Колдуем(colour);
            текстура следующая:
            Прикреплённая картинка
            Прикреплённая картинка
            :whistle:

            Или можно как-то буфер, где оно всё лежит конвертнуть в неё и передавать?
            Сообщение отредактировано: Serafim -
              Цитата Serafim @
              Или можно как-то буфер, где оно всё лежит конвертнуть в неё и передавать?
              Ага, так и делают. :yes:
                о, ну тогда ништяк :yes:

                пока что всё, сенкс
                  К слову, поигрался немного с ними, результат:
                  Прикреплённая картинка
                  Прикреплённая картинка


                  Думаю получилось намного лучше, чем в аттаче в первом посте.
                    Хочу увидеть анимацию
                      Цитата DIS @
                      Хочу увидеть анимацию

                      Прикреплённая картинка
                      Прикреплённая картинка


                      Добавлено
                      С дымом только поиграться бы, но на светлом фоне норм выглядит.

                      Добавлено
                      Цитата Serafim @
                      С дымом только поиграться бы

                      Это всё тот же самый костёр из треугольников, только:
                      1) Наложен шейдер (если я правильно всё сделал), что указан в посте
                      2) Ещё добавлен небольшой блум-эффект

                      Из-за того, что прозрачность не плавно пропадает, а "слоями", как в первом посте - дым исчезает не так плавно, как хотелось бы.
                      1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                      0 пользователей:


                      Рейтинг@Mail.ru
                      [ Script execution time: 0,1217 ]   [ 22 queries used ]   [ Generated: 18.05.24, 14:31 GMT ]