Показать сообщение отдельно
Старый 08.09.2009, 23:39   #11
jimon
 
Сообщений: n/a
Ответ: 2d в OpenGL. вывод тени от спрайта

хм
//цвета теней не смешиваються!!!
      glEnable(GL_STENCIL_TEST);//включаем трафарет
      //мы в любом случае будем писать в трафарет
      glStencilFunc(GL_ALWAYS, 1, 255);
      //в том месте где рисуется трафарет значение буфера заменяем на 1
      glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);

//ну вообще-то нам надо отсечь рисования прозрачных пикселей уровня
glEnable(GL_ALPHA_TEST);
glAlphaFunc(GL_GREATER,0.5f); //выводим только те пиксели уровня у которых alpha > 0.5f

      level_draw();//уровень является трафаретом-только на нем видна тень

      // тень будет рисоваться только в тех местах,где значение в буфере 1
      glStencilFunc(GL_EQUAL, 1, 255);
      glStencilOp(GL_KEEP, GL_KEEP, GL_ZERO);

glAlphaFunc(GL_GREATER,0.2f); //выводим только те пиксели тени у которых alpha > 0.2f

      player_shadow_draw();
      enemy_air_shadow_draw();
glDisable(GL_ALPHA_TEST);
      glDisable(GL_STENCIL_TEST);//отключаем трафарет
там где 0.2f надо будет эксперементировать, в принципе если тени наложатся то в границе наложения будут небольшие баги, имхо тени надо сумировать
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
aureli0 (09.09.2009)