NeonLight_Child 16.09.2009 21:36
Coding — Глюк с рисованием тени при использовании OpenGL
Здравствуйте.Сейчас я делаю вертикальный scroll-shooter (леталка-стрелялка), что-то похожее на Tyrian, Raptor, Raiden и т.п.
Пишу на с++ с использованием связки SDL+OpenGL
Столкнулся с одной проблемой...
Раньше я использовал для вывода спрайта затекстурированный полигон, каждый спрайт(его текстура) находиться в отдельных *.png файлах.
Эта процедура имеет примерно такой вид (процедура 1):
Код:
Захотелось использовать одну общую текстуру (с набором спрайтов). Спрайт получать закрашивая полигон задавая текстурные координаты, и процедура стала иметь вид (процедура 2):
Код:
В игре для летающих объектов хочется сделать тень, отбрасываемую ими на землю. Посоветовали использовать для этих целей буфер трафарета, вот примерно так это выглядит:
Код:
Если использовать для вывода трафарета level_draw процедуру 1, то тень рисуется как надо-только на трафарете, учитываются спрайты с "дырками" альфа канала (на дырках тени не должно быть), тени не смешиваются. НО мне хочется использовать для вывода level_draw процедуру 2, так проще. Если так сделать то начинаются появляться глюки-тени иногда мигают, пропадают на некоторое время или просто не рисуются. Я думаю что это из-за альфа теста и альфа функа , если их убрать тени будут рисоваться на всех спрайтах level_draw, включая "дыры" альфа канала.
Хочется вывода нормальных теней при использовании процедуры 2, как при использовании процедуры 1.
То есть, чтобы тени не смешивались, хотя бы не рисовались на "дырах". Как это исправить ?
вот, собсно сами глючные исходники для раскрытия всей картины:
http://narod.ru/disk/13246865000/light.tar.gz.html
тень от самолета на заднем фоне уровня иногда мигает или пропадает вовсе:( на космосе тени нет-так и должно быть.
xT 16.09.2009 22:18 #
+ 4 -
Добавил подсветку и немного разметки =)
Вообще вопрос по OpenGL, а не по linux. Но если выложишь небольшой рабочий код и скажешь как его под linux запускать, то можно было бы посмотреть.
Вот кстати неплохо было бы написать обзоз о том, как заставить в линуксе работать вместе SDL и OpenGL.
Вот кстати неплохо было бы написать обзоз о том, как заставить в линуксе работать вместе SDL и OpenGL.
по OpenGl, я в нем, к сожалению, не очень силен:(
код выложил, поправил пост.
Компилировать командой make в терминал находясь в папке с исходниками.
Требуется наличие библиотек SDL (в убунте либы ставил через синаптик тыкая галочки рядом с libsdl* и libsdl-dev*)
код выложил, поправил пост.
Компилировать командой make в терминал находясь в папке с исходниками.
Требуется наличие библиотек SDL (в убунте либы ставил через синаптик тыкая галочки рядом с libsdl* и libsdl-dev*)