Показать сообщение отдельно
Старый 08.09.2009, 20:34   #3
aureli0
ПроЭктировщик
 
Регистрация: 19.03.2007
Сообщений: 134
Написано 10 полезных сообщений
(для 20 пользователей)
Re: 2d в OpenGL. вывод тени от спрайта

спасибо)
эээээ, значит както так??

//ИНИЦИАЛИЗАЦИЯ
// очищаем все буферы
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
// разрешаем тест трафарета
glEnable(GL_STENCIL_TEST);

//Где то в главном цикле программы

рисуем задний фон

//в трафарет для пикселя пишется 0
glStencilFunc(GL_ALWAYS, 0, 0);

рисуем дикорации

//в трафарет для пикселя пишется 1
glStencilFunc(GL_ALWAYS, 1, 0);
//ставим условие что рисуем пиксель только если в трафарете 1
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);

рисуем тень

//в трафарет для пикселя пишется 2-делаем отсечение смешивания
glStencilFunc(GL_ALWAYS, 2, 0);

рисуем все остальное


смотрел сюда
http://www.opengl.org.ru/books/open_gl/chapter4.12.html

с синтаксисом glStencilFunc и glStencilFunc я так и не разобрался(

У себя ы программе сделал так:

//гдето в главном цикле
//в трафарет для пикселя пишется 0
glStencilFunc(GL_ALWAYS, 0, 0);

level_draw();
enemy_ground_draw();//рисование и анимация наземных врагов
starwind_draw();

//в трафарет для пикселя пишется 1
glStencilFunc(GL_ALWAYS, 1, 0);
//ставим условие что рисуем пиксель только если в трафарете 1
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);

player_shadow_draw();
enemy_air_shadow_draw();

//в трафарет для пикселя пишется 2-делаем отсечение смешивания
glStencilFunc(GL_ALWAYS, 2, 0);


enemy_air_draw();//рисование и анимация летающих врагов
enemy_blast_draw();//рисуем патрон врага

player_draw();//Рисуем корабль игрока
player_ammo_draw();//Рисуем патрон игрока

effect_draw();

ничего не получилось. картинка осталась без изменения
что делать?

Последний раз редактировалось aureli0, 08.09.2009 в 20:58.
(Offline)
 
Ответить с цитированием