Ogre3D Intermediate Tutorials / Промежуточные туториалы Ogre3D: Intermediate Tutorial 6: Projective Decals
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
Скомпилируйте и запустите приложение, вы должны увидеть несколько голов Огра с текстурой декали, спроецированной на них. H0tHead 27.09.11 в 09:24 |
|
|
ИЗБАВЛЯЕМСЯ ОТ ЗАДНЕЙ ПРОЕКЦИИ H0tHead 27.09.11 в 09:25 |
||
|
ВВЕДЕНИЕ proVIDec 25.09.11 в 06:17 |
||
|
Как вы, возможно, могли заметить, в нашем приложении присутствует сразу две проекции. H0tHead 27.09.11 в 09:25 |
||
|
Первая - проекция вдоль направления -Z, то куда направлен наш конус отсечения, другая проекция направлена вдоль направления +Z, на головы позади нашего конуса. H0tHead 27.09.11 в 09:27 |
||
|
Причина по которой это происходит - когда мы проецируем текстуру, то происходит также и обратная (инверсная) проекция в направлении противоположенном нашему взгляду. H0tHead 27.09.11 в 09:29 |
||
|
Очевидно, это не совсем то, что мы хотим получить. Для исправления этого эффекта мы создадим фильтр, который уберет обратную проекцию. H0tHead 27.09.11 в 09:30 |
||
|
ИЗМЕНЯЕМ ПРОЕКТОР H0tHead 27.09.11 в 09:30 |
||
|
Для фильтрации обратной проекции, мы должны создать новый конус отсечения для фильтра. который будет направлен в том направлении, в котором мы хотим произвести фильтрацию. H0tHead 27.09.11 в 09:31 |
||
|
Добавьте следующий код в метод createProjector(): H0tHead 27.09.11 в 09:32 |
||
|
Это должно быть вам уже знакомо. H0tHead 27.09.11 в 09:32 |
||
|
Разница лишь в том, что мы повернули узел на 90 градусов для ориентирования его в обратном направлении. H0tHead 27.09.11 в 09:33 |
||
|
ИЗМЕНЯЕМ МАТЕРИАЛ H0tHead 27.09.11 в 09:33 |
||
|
Теперь мы должны добавить еще один текстурный модуль в проход который мы создали ранее. H0tHead 27.09.11 в 09:34 |
||
|
Добавьте следующий код в метод makeMaterialReceiveDecal() : H0tHead 27.09.11 в 11:10 |
||
|
Это все должно быть знакомо вам. H0tHead 27.09.11 в 11:11 |
||
|
Отметим, что поскольку мы используем фильтр-текстуру и фильтрующий конус отсечения, то мы отключаем текстурную фильтрацию. H0tHead 27.09.11 в 11:13 |
||
|
Скомпилируйте и запустите приложение. proVIDec 25.09.11 в 06:17 |
||
|
Вы должны увидеть только проекцию по направлению нашего проектора. H0tHead 27.09.11 в 11:13 |
||
|
СКРЫТИЕ ПРОЕКЦИЙ H0tHead 27.09.11 в 11:13 |
||
|
ПРОСТОЕ ВРАЩЕНИЕ H0tHead 27.09.11 в 11:14 |
||
|
Для того чтобы скрыть проекции, мы будем вращать проектор. H0tHead 27.09.11 в 11:14 |
||
|
Для этого просто добавьте следующий код в начало метода frameRenderingQueued() : H0tHead 27.09.11 в 11:15 |
||
|
Скомпилируйте и запустите приложение. H0tHead 27.09.11 в 11:15 |
||
|
Вы должны увидеть проецирование текстуры вдоль всего круга голов Огра. H0tHead 27.09.11 в 11:16 |
||
|
НАПОСЛЕДОК H0tHead 27.09.11 в 11:16 |
||
|
вы должны знать одну вещь при использовании проекционных текстур. Если вы используете в своем приложении проекционные текстуры, убедитесь в том, что внешняя граница текстуры полностью прозрачна. H0tHead 27.09.11 в 11:17 |
||
|
Если это не так, вы получите неприятное смешивание вдоль всей текстуры, поскольку так работает механизм адресации Clamp. H0tHead 27.09.11 в 11:18 |
||
|
Осмотримся. H0tHead 27.09.11 в 11:19 |
||
|
Предыдущий совет верен, но есть решение, когда ваша текстура не имеет прозрачной внешней границы: H0tHead 27.09.11 в 11:20 |
||
|
До тех пор, пока формат вашей текстуры поддерживает альфа-канал( напр. PNG), вы можете установить текстурную адресацию в режим TAM_BORDER( граница )( или border, если вы используете скрипт материала ) и установить цвет границы равный (0,0,0,0). H0tHead 27.09.11 в 11:22 |
||
|
Это приведет к тому, что при использовании текстурных координат вне диапазона [0,1] мы получим цвет границы, который мы указали. H0tHead 27.09.11 в 11:23 |
||
|
По существу. вы только что добавили своей текстуре прозрачные границы. H0tHead 27.09.11 в 11:24 |
||
|
Вы можете посмотреть быстрое включение проекционных текстур в ваш проект. H0tHead 27.09.11 в 11:25 |
