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

Главата на цветове и светлина би била непълна без обсъждане на сенки. Добавяне на сянка към сцени може значително да увеличи своя реализъм и визуални ефективност.

Фигура 5.38 и 5.39 показват, два осветени куб. Въпреки че и двете опции са боядисани куб със сянка е по-убедително от куба без него.

Какво е сянка?

Концептуално, рисуване сенки е съвсем проста. Сянката се получава, когато обектът се затваря светлината от източника на светлина и не позволява то да стигне до друг обект или повърхност разположен зад обекта, създаване на сенки. Площта на тъмния предмет, на които се наслагват контура засенчване обект се появява тъмно. Сянката може да бъде създаден по програмен чрез проектиране на оригиналния обект равнината на повърхността, която съдържа обекта. След това обектът е съставен черен (или друг тъмен цвят), евентуално частично прозрачен

Сенки в OpenGL
Сенки в OpenGL

Има много методи за рисуване и засенчващи алгоритми (включително доста сложен). Тъй като книгата е посветена главно OpenGL софтуерен интерфейс, ние се надяваме, че чрез усвояване на софтуерен инструмент, ще намерите време за изучаване на предложената в Приложение А, включително тези, свързани с математически апарат, който е в основата на програмирано подход литература. Глава 18, "дълбочина на текстурата и сянка", обсъждано и средства за пряка подкрепа създаването на сенки в OpenGL; в тази глава, е достатъчно да се докаже, един от най-простите методи добре работят при прилагане на сенки върху плоска повърхност (като земята). Процесът на този дизайн е илюстриран на Фиг. 5.40.

Сенки в OpenGL
Сенки в OpenGL

За да се наслагват една върху проекцията на обекта в друга повърхност с помощта на нетривиални операции с матрици, които ние засегнаха в предишната глава. Сега ще се опитаме да направи процеса по възможно най-прости понятия и действия.

Projection код наслагване

Значи, това е необходимо, за да "изглади" специално наблюдение матрица модел, за да са изготвени в двуизмерна форма всички обекти, представени в него. Независимо от ориентацията на обекта е сплескан в равнина, която е неговата сянка. Друг трябва да се вземат под внимание два параметъра: разстоянието до източника на светлина и нейната посока на радиация. Лъчите на светлинния източник определя формата на сянка и ефекта върху неговия размер. Ако някога сте видели сянката му рано или късно през нощта, тогава знаете колко дълго и извити тя може да бъде, в зависимост от позицията на слънцето.

Показания на Обява 5.8 gltMakeShadowMatrix glTools функция на библиотеката приема като аргументи трите точки на самолета, където виждате сянка Же корите на (тези три точки не лежат на една права линия), позицията на източника на светлина и на индекса на трансформация матрица, която е изграждането на функцията , Ние няма да навлизаме в джунглата на линейна алгебра, но трябва да сте наясно, че тази функция показва коефициентите на самолета, който ще се намира в сянка, и с тяхна помощ, като се вземе предвид позицията на източника на светлина, изграждане на матрица трансформация. Ако тази матрица се умножава по наблюдение текущата матрица режим- дали всички обекти, изготвени след това ще бъдат проектирани върху тази равнина.

например сенки

За да се демонстрира използването на функцията е показано на Обява 5 8 суспензия струя във въздуха над земята източника на светлина е разположен над и леко отляво на самолета Използване на бутоните самолети стрелки може да се върти, докато на земята ще варира съответно сянка изхода на съответния SHADOW програмата показано на фигура 5 41

Кодът е показано на Обява 5: 9 показва как матрица сянка проекция е създаден Имайте предвид, че ние сме създали една матрица веднъж функция SetupRC и го записва в глобална променлива !!

Сенки в OpenGL

Малката обява може 10 представлява визуализация на системата за код "самолет с сянка" Първоначално, обръщаме земята след изобразяват на самолета (както обикновено), възстановяване на модела на наблюдение матрица и го умножете по сянката на матрицата Така че ние се получи желаният матрица на сянка леене. След това направи отново самолет. (Ние сме промених кода и сега е необходимо етикет информиране функция DrawJet за провеждане на цветен или черно-бял изображения) възстановено, след като моделът на наблюдение матрица, направи малък жълт сфера приравняване на положението на източника на светлина Имайте предвид, че преди да се направят самолет в самолет е бил деактивиран, ние проверите дълбочината на този правоъгълник се намира в една и съща равнина, в която е изготвена на сянка, и ние трябва да се гарантира, че на сянка е изготвен. Не сме обсъждали какво ще се случи, ако двата обекта да изготвят или самолети на едно място. Въпреки това, ние се направят тестове на дълбочина като инструмент, който ви позволява да се определи реда на графични обекти. Ако два обекта заемат едно и също място, обикновено показва само последният изготвя формата Понякога, обаче, поради лошите стойности за разрешаване на дълбочина настъпва пълна бъркотия - пикселите се показват смесена дисплей, принадлежащи към различни предмети (Z гасене)

Връщайки се към света на сферите

Последният пример е твърде голям, за да се получи напълно изходния код в предишната глава разгледахме SPHEREWORLD програма, която създава триизмерен свят, населен с анимация и движението на камерата. В тази глава се върнем в света на сфери и се добавят към "жителите" (Torus и области) източници на светлина и свойства на материалите. Освен това, с помощта на технологията за налагане сенки на това, което ние създаваме сянката на самолета на земята! Както вече споменахме, от време на време ще се върнем към този пример, като добавят към нея учи OpenGL функции фиг. 5.42, например, показва изходното SPHEREWORLD програма, основана материал изследвана в тази глава.

Сенки в OpenGL

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

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