ПредишенСледващото

Принципът е много прост шейдъри. Всичко, което може да се види с позицията на източника на светлина, свети, а останалата част е в сянка.

Принципът на работа може да се разделя на два етапа:
1. Спестяване текстура дълбочина сцена с позиция източник на светлина. Тази структура се нарича картата на сянка.
2. Render сцени с сенки, като се използват данните, получени в първия етап.

В примера, фазата на два члена направен в отделна RenderToShadowMap () и RenderShadowedScene ().

В примера за изпълнение две сянка оказване различаващи изпълнение тя ще бъде използвана. варианти разлика е, че в първия случай, ние ще запазим в текстурата на дълбочина с шейдъри и налагане на сенки на сцената, за да се направи сравнение с ръчно текстура. Във втория случай, представяне се извършват веднъж на дълбочината на текстурата без засенчване в този процес, както и за сравнение чрез сравняване на режима на текстура, която ни освобождава от ръката на сравнение в Shader.

Инициализация и Shader Model е тривиално, можете да ги сортирате по своя собствена, така че аз няма да го опиша. Но инициализиращите текстури трябва да бъдат описани подробно.

Нека да започнем с разглеждане на варианти както сянката оказване:

Вариант # 1: Прикрепете текстура към FBO като цвят буфер. За дълбочината на тест, като се използва мазилката буфер.
В този случай, ние трябва да се произвеждат от дълбочината на влизане с помощта на Shader. Плюс това се крие във факта, че ние може да записва дълбочината, колкото искаме. Можем да спасим нещо друго, в допълнение към дълбините, до останалите компоненти на текстурата, ако не разполагате с един компонент.

Вариант 2: Прикачване на текстура на FBO като буфер дълбочина. цвят буфер не се използва.
Тук ние вече не се нуждаят от шейдър за поддържане дълбочина. Просто направи на сцената.

И двата варианта имат своите плюсове и минуси.

Инициализация за вариант № 1

Да започнем с подготовката за работа за вариант номер 1. Създаване на структура, която ще бъде приложен като цвят буфер:

Мисля, че това изисква някакво обяснение използва текстура формат.

Да започнем с най-бита. Колкото по-ниска дълбочина малко, толкова по-ниска точност. Ето защо, при ниска скорост на предаване, по-голямо внимание трябва да се обърне клипинг равнина, трябва близо и далеч самолет възможно най-близо до сцената, особено на съседа. В противен случай, тя може да доведе до неприятни артефакти поради липса на точност. В този пример ще се използва 16 бита. Въпреки, че може да се постигне успех с 8-битов текстура.

предпоследния тип аргумент. в glTexImage2D () функция. Това не е така в случая няма значение, както и видове са подредени за красота.

Сега създайте изобразяването буфер, имаме нужда от него за дълбочината на теста:

Свързани статии

Подкрепете проекта - споделете линка, благодаря!