Sergio666
AFAIR ты на delphi пишешь? если да, то какой хидер юзаешь?
Dimich
> http://ifolder.ru/13731211
Этот работает. Показывает конячку с тенями, источником света и пр.
> а если допустим dglOpenGL заменить? или Textures.pas?
Даже не знаю, что и сказать... у меня такого нет
Dimich
> если да, то какой хидер юзаешь?
Когда-то давно он тоже был dglOpenGL. Теперь я его переделал и он у меня гордо называется OpenGL20.pas, хотя к именно к 2.0 отношения не имеет :)
Dimich
С твоим ехе запустилось, скорее всего косяк какойто со строками в dglOpenGL.pas, у меня 2009я Дельфя...
Executor
я компилил в пятёрке, так что очень даже возможно...
Executor
> всего косяк какойто со строками в dglOpenGL.pas
+1000
Как это я сразу не подумал. У меня же тоже 2009-ая!
мммм, а артефакты, появляющиеся из-за области, не попавшей в shadowmap, куда девать?
BenTech
> мммм, а артефакты, появляющиеся из-за области, не попавшей в shadowmap, куда
> девать?
Расширять область, использовать более сложную технику
Ну для теней от солнца данный пример не годится). А вот для фонарика ИМХО в самый раз. Но ambient сцены = 0 не позволяет куда либо это прикрутить(ничего не видно же), а если сделать что-то типо spot = clamp(spot,0.5,1.0), то из темноты вылазят артефакты), что не есть хорошо(и оптять этот простой метод с тенями никуда не применить). Вот если бы цвет артефактного пиксела сделать равным цвету неартефактного и незатененного пиксела...
Что за артефактные пикселы?
Для солнца всё тоже самое, только использовать орто матрицу...
Под "артефактными пикселами" я подразумевал те, которые не попадают в SM и в результате вот...
sample
если их цвет сделать цветом незатененного, то тень будет просто "обрываться" на границе shadowMap(такой вот способ выкинуть артефакты), только вот как %).
> Для солнца всё тоже самое, только использовать орто матрицу...
ммм, а я думал "мягкий" pssm\csm. Просто одной shadowMap сильно не хватает точности. От больших объектов альясинг, а от маленьких, да еще и со сложным контуром, теней нет вообще....
хммм сделал так...
smcoord = lpos.xyz / lpos.w; float mapScale = 1.0 / 2048.0; shadow = shadow2DProj(shadowMap, lpos).x; if(shadow > mapScale) { shadow = 1.0; }
баги пропали, но надо еще кое-что проверить...
BenTech
Всё решается клампом текстурных координат, в теме я об этом уже писал...
> Просто одной shadowMap сильно не хватает точности. От больших объектов
> альясинг, а от маленьких, да еще и со сложным контуром, теней нет вообще....
Качество это уже другой вопрос...
Если это РТС вид сверху-сбоку, то одного шадоумапа вполне хватит, а вот если это ФПС например, то тут уже смотреть какието продвинутые техники типа PSSM...
BenTech
Если
gl_FragColor = tex * spot;
заменить на
gl_FragColor = tex * clamp(spot,0.5,1.0);
всё видно, и артефактов не наблюдается.
> всё видно, и артефактов не наблюдается
Действительно! Все гениально и просто.
Тема в архиве.