![]() |
2d в OpenGL. вывод тени от спрайта
Вложений: 1
Сейчас делаю игрушку-скролл шутер. Появились трудности с выводом теней.
На данный момент тени от спрайтов вывожу следующим образом: Код:
void enemy_air_shadow_draw()//рисование тени от воздушных юнитов Как сделать так, чтобы тень появлялась ТОЛЬКО на декорациях уровня(зеленые элементы), а не на картинке заднего плана(космос)? Как исправить смешение теней? |
Ответ: 2d в OpenGL. вывод тени от спрайта
aureli0
можно использовать буфер трафарета (stencil), принцип простой : рисуем задний фон и в трафарет для пикселя пишется 0, рисуем декорации - в трафарет для пикселя пишется 1, ставим условие что рисуем пиксель только если в трафарете 1 и рисуем тени, таким же способом делается отсечения смешивания - после рисования тени пишем в буфер трафарета 2, в итоге следуйшие пиксели тени не смогут быть выведены на этот место потому что в буфере трафарета стоит не 1, а 2 ps. никогда не юзал stencil (но буду), вышенаписанное это мои теоретические знания |
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(); ничего не получилось. картинка осталась без изменения что делать? |
Re: 2d в OpenGL. вывод тени от спрайта
получилось вот таким образом, но тени смешиваются,как это исправить?
Код:
|
Ответ: 2d в OpenGL. вывод тени от спрайта
ммм по-идее так должно работать
Код:
glEnable(GL_STENCIL_TEST);//включаем трафарет |
Re: 2d в OpenGL. вывод тени от спрайта
Код:
// Значение, которым будет заполняться буфер стенсила при его очистке спасибо) А как сделать чтобы тени еще не выводились на дырах(альфа канал) в спрайтах? |
Ответ: 2d в OpenGL. вывод тени от спрайта
Цитата:
|
Re: 2d в OpenGL. вывод тени от спрайта
Вложений: 1
тоже теперь не все хорошо тени от объектов одного типа режут друг друга
|
Ответ: 2d в OpenGL. вывод тени от спрайта
aureli0
так приделай еще альфа тест для теней тоже с каким нибудь условием что если альфа = 0 то не рисовать пиксель |
Re: Ответ: 2d в OpenGL. вывод тени от спрайта
Цитата:
Код:
//цвета теней не смешиваються!!! |
Ответ: 2d в OpenGL. вывод тени от спрайта
хм
Код:
//цвета теней не смешиваються!!! |
Re: 2d в OpenGL. вывод тени от спрайта
вот спасибо)) теперь все как надо. Да глюки есть. Поменял значение с 0.2 на 0.4 границы пропали но тени стали четче ну и фиг с ним все здорово))
Еще раз спасибо)) |
Re: 2d в OpenGL. вывод тени от спрайта
опять появились проблемы с тенями. Раньше каждая текстура хранилась в отдельном файле, и все работало без проблем. Теперь я использую для вывода level один файл с несколькими текстурами-появились глюки:
то иень периодически пропадает, то пооявляется. В трафарет помимо level_draw я добавил еще наземных юнитов enemy_groumd_Draw. Так вот они стали тоже "моргать". Код:
//цвета теней не смешиваються!!! работает с глюками при выводе уровня из 1 текстуры |
Часовой пояс GMT +4, время: 04:00. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot