Принципът е много прост шейдъри. Всичко, което може да се види с позицията на източника на светлина, свети, а останалата част е в сянка.
Принципът на работа може да се разделя на два етапа:
1. Спестяване текстура дълбочина сцена с позиция източник на светлина. Тази структура се нарича картата на сянка.
2. Render сцени с сенки, като се използват данните, получени в първия етап.
В примера, фазата на два члена направен в отделна RenderToShadowMap () и RenderShadowedScene ().
В примера за изпълнение две сянка оказване различаващи изпълнение тя ще бъде използвана. варианти разлика е, че в първия случай, ние ще запазим в текстурата на дълбочина с шейдъри и налагане на сенки на сцената, за да се направи сравнение с ръчно текстура. Във втория случай, представяне се извършват веднъж на дълбочината на текстурата без засенчване в този процес, както и за сравнение чрез сравняване на режима на текстура, която ни освобождава от ръката на сравнение в Shader.
Инициализация и Shader Model е тривиално, можете да ги сортирате по своя собствена, така че аз няма да го опиша. Но инициализиращите текстури трябва да бъдат описани подробно.
Нека да започнем с разглеждане на варианти както сянката оказване:
Вариант # 1: Прикрепете текстура към FBO като цвят буфер. За дълбочината на тест, като се използва мазилката буфер.
В този случай, ние трябва да се произвеждат от дълбочината на влизане с помощта на Shader. Плюс това се крие във факта, че ние може да записва дълбочината, колкото искаме. Можем да спасим нещо друго, в допълнение към дълбините, до останалите компоненти на текстурата, ако не разполагате с един компонент.
Вариант 2: Прикачване на текстура на FBO като буфер дълбочина. цвят буфер не се използва.
Тук ние вече не се нуждаят от шейдър за поддържане дълбочина. Просто направи на сцената.
И двата варианта имат своите плюсове и минуси.
Инициализация за вариант № 1
Да започнем с подготовката за работа за вариант номер 1. Създаване на структура, която ще бъде приложен като цвят буфер:
Мисля, че това изисква някакво обяснение използва текстура формат.
Да започнем с най-бита. Колкото по-ниска дълбочина малко, толкова по-ниска точност. Ето защо, при ниска скорост на предаване, по-голямо внимание трябва да се обърне клипинг равнина, трябва близо и далеч самолет възможно най-близо до сцената, особено на съседа. В противен случай, тя може да доведе до неприятни артефакти поради липса на точност. В този пример ще се използва 16 бита. Въпреки, че може да се постигне успех с 8-битов текстура.
предпоследния тип аргумент. в glTexImage2D () функция. Това не е така в случая няма значение, както и видове са подредени за красота.
Сега създайте изобразяването буфер, имаме нужда от него за дълбочината на теста:
Свързани статии