спасибо)
эээээ, значит както так??
//ИНИЦИАЛИЗАЦИЯ
// очищаем все буферы
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();
ничего не получилось. картинка осталась без изменения
что делать?