Ogre3D Basic Tutorials / Базовые туториалы Ogre3D: Basic Tutorial 3: Terrain, Sky, and Fog
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
Отметим использование функций getLayerBlendMap() и getBlendPointer(). wuffur 12.07.11 в 12:59 Также обратите внимание на использование методов getLayerBlendMap() и getBlendPointer(). Mingun 24.07.11 в 09:31 |
|
|
КОМПИЛЯЦИЯ И ЗАПУСК - ЧАСТЬ ПЕРВАЯ wuffur 12.07.11 в 12:59 |
||
|
Пойдем дальше и скомпилируем и запустим приложение Basic Tutorial 3 сейчас. wuffur 12.07.11 в 13:00 Пойдем дальше – скомпилируем и запустим приложение. Mingun 24.07.11 в 09:39 |
||
|
Вы должны получить неплохо отрендеренный ландшафт. wuffur 12.07.11 в 13:00 Вы должны получить неплохо выглядящий ландшафт. Mingun 24.07.11 в 09:32 |
||
|
Однако, вы можете улучшить ваше маленькое приложение, сделав три добавления к нему: wuffur 12.07.11 в 13:01 |
||
|
1. Индикатор генерации ландшафта wuffur 12.07.11 в 13:01 |
||
|
2. Сохранение ландшафта wuffur 12.07.11 в 13:03 |
||
|
3. Очистка за собой wuffur 12.07.11 в 13:03 |
||
|
Во-первых нам нужно добавить новый член данных в класс BasicTutorial3: wuffur 12.07.11 в 13:03 |
||
|
Нам нужно переопределить три функции в нашем классе BasicTutorial3: wuffur 12.07.11 в 13:04 Затем нам надо переопределить три функции в нем: Mingun 17.10.11 в 16:45 |
||
|
1.frameRenderingQueued - для того, чтобы показать процесс генерации ландшафта и сохранить его когда он закончиться wuffur 12.07.11 в 13:05 1. frameRenderingQueued – для показа процесса генерации ландшафта и сохранения сгенерированной версии Mingun 24.07.11 в 09:41 |
+2 | |
|
2. createFrameListener - для того, чтобы сделать информационный ярлык wuffur 12.07.11 в 13:05 2. createFrameListener – для создания метки с информацией Mingun 24.07.11 в 09:43 |
+3 | |
|
3. destroyScene - для того, чтобы убраться после себя. wuffur 12.07.11 в 13:06 3. destroyScene – для подчистки за собой Mingun 24.07.11 в 09:44 |
||
|
Итак, без лишних слов: wuffur 12.07.11 в 13:07 |
||
|
Во-первых мы спрашиваем наш TerrainGroup, работает ли он над генерацией ландшафта: isDerivedDataUpdateInProgress. wuffur 12.07.11 в 13:22 |
||
|
Если он работает над ней, давайте покажем информационный ярлык с правильной подписью. wuffur 12.07.11 в 13:23 Если работает, давайте покажем информационную метку с правильной подписью. Mingun 24.07.11 в 09:46 |
||
|
А если он не работает над ней, проверьте импортировали мы новый ландшафт. wuffur 12.07.11 в 13:23 А если нет – проверим, импортировали ли мы новый ландшафт. Mingun 24.07.11 в 09:48 |
||
|
Если мы делали это, то тогда нужно сохранить все части ландшафта, так чтобы мы могли пропустить процесс генерации в следующий раз, когда нам нужно будет запустить приложение. wuffur 12.07.11 в 13:25 Если да, сохраним все куски ландшафта, чтобы в следующий раз при запуске нашего приложения пропустить процесс генерации. Mingun 24.07.11 в 09:50 |
||
|
Мы переопределяем эту функцию поскольку нам нужно добавить новый информационный ярлык к нашему OgreBites::SdkTrayManager mTrayMgr. wuffur 12.07.11 в 13:25 Мы переопределяем эту функцию, поскольку нам нужно добавить новую информационную метку к нашему объекту mTrayMgr класса OgreBites::SdkTrayManager. Mingun 24.07.11 в 09:51 |
||
|
Так как BaseApplication конструирует его в функции createFrameListener, мы не можем добавить ее в нашу функцию 'createScene', поскольку функция createFrameListener вызывается 'после' функции createScene... wuffur 12.07.11 в 13:27 |
+3 | |
|
Очень просто: wuffur 12.07.11 в 13:27 |
||
|
Вызовем BaseApplication::createFrameListener и затем проникнем в наш информационный ярлык. wuffur 12.07.11 в 13:28 Вызовем метод BaseApplication::createFrameListener, а затем создадим нашу информационную метку. Mingun 24.07.11 в 09:58 |
||
|
Это то место, где мы после себя чистим: wuffur 12.07.11 в 13:29 Здесь мы подчищаем мусор после себя: Mingun 24.07.11 в 09:59 |
||
|
Для поля OGRE_NEW требуется поле OGRE_DELETE. wuffur 12.07.11 в 13:34 OGRE_NEW требует использования OGRE_DELETE. Mingun 24.07.11 в 09:59 |
+1 | |
|
КОМПИЛЯЦИЯ И ЗАПУСК - ЧАСТЬ ВТОРАЯ wuffur 12.07.11 в 13:34 |
||
|
Если вы скомпилируете и запустите приложение сейчас, вы должны увидеть информационный ярлык, говорящий вам, что TerrainGroup занята генерацией ландшафта. wuffur 12.07.11 в 13:48 Если вы сейчас скомпилируете и запустите приложение, вы должны будете увидеть информационную метку, сообщающую вам, что TerrainGroup занята генерацией ландшафта. Mingun 24.07.11 в 10:03 |
||
|
Когда ярлык исчезнет, TerrainGroup сохранит этот ландшафт. wuffur 12.07.11 в 13:51 Когда метка исчезнет, TerrainGroup сохранит этот ландшафт. Mingun 24.07.11 в 10:03 |
||
|
Вы возможно отметите, что вы не можете выйти из программы, когда запущен процесс генерации ландшафта. wuffur 12.07.11 в 13:52 Вы, возможно, обратите внимание, что вы не можете выйти из программы во время процесса генерации ландшафта. Mingun 24.07.11 в 10:04 |
||
|
Однако, если вы запустите эту программу во второй раз сейчас, вы получите сообщение полностью и процесс запуска будет намного более быстрым потому, что мы генерируем файл данных о ландшафте напрямую. wuffur 12.07.11 в 13:54 Однако, если вы запустите программу во второй раз, вы не получите сообщения вовсе и процесс запуска пройдет намного быстрее, поскольку мы напрямую загружаем уже сгенерированный файл с ландшафтом. Mingun 24.07.11 в 10:07 |
||
|
Продолжайте и посмотрите в директорию OGRE_HOME/media. wuffur 12.07.11 в 15:47 Теперь перейдите в папку OGRE_HOME/media. Вы должны увидеть здесь файл 'BasicTutorial3Terrain_00000000.dat'... Mingun 24.07.11 в 10:09 |
||
|
ВВЕДЕНИЕ В ПЕЙДЖИНГ ЛАНДШАФТА(этот параграф будет перемещен в руководства для опытных разработчиков) wuffur 12.07.11 в 15:48 ВВЕДЕНИЕ В СТРАНИЧНЫЙ ЛАНДШАФТ (этот параграф будет перемещен в продвинутые уроки) Mingun 24.07.11 в 10:11 |
||
|
У загрузки страницы на данный момент две стадии: wuffur 12.07.11 в 15:48 В настоящей реализации загрузка страницы производится в две стадии: Mingun 26.07.11 в 13:50 |
||
|
1. Подготовка(обычно асинхронная) wuffur 12.07.11 в 15:49 |
||
|
2. Загрузка (должна быть синхронизированной и вызываться из главного потока) wuffur 12.07.11 в 15:50 |
||
|
Для просты в этой части руководства будет использоваться только второй шаг. wuffur 12.07.11 в 15:50 Для простоты в этом уроке будет использоваться только второй шаг. Mingun 17.10.11 в 16:58 |
||
|
Для того, чтобы использовать пейджинг рекомендуется приготовить страницы с данными о Ландшафте (вроде 'BasicTutorial3Terrain_00000000.dat') заранее. wuffur 12.07.11 в 15:51 Чтобы использовать страничную подкачку, рекомендуется подготовить страницы ландшафта (как рассмотренный выше 'BasicTutorial3Terrain_00000000.dat') заранее. Mingun 26.07.11 в 13:53 |
||
|
Вы можете использовать mTerrainGroup->saveTerrains(true) или Ogitor-tool, чтобы выполнить эту задачу. wuffur 12.07.11 в 15:52 Вы можете использовать вызов mTerrainGroup->saveTerrains(true) или инструмент Ogitor для этой задачи. Mingun 26.07.11 в 13:55 |
||
|
Добавьте эту часть кода в секцию данных private в класс BasicTutorial3: wuffur 12.07.11 в 15:53 Добавте этот код в секцию private класса BasicTutorial3: Mingun 26.07.11 в 13:56 |
||
|
Добавьте этот код к функции createScene(): wuffur 12.07.11 в 15:53 |
||
|
Нашей целью является создание PagedWorld, которую будет использовать менеджер страниц, используя PageManager и TerrainPaging. wuffur 12.07.11 в 15:54 |
||
|
Система пейджинга Ogre - это намного больше, чем просто работа с ландшафтом. wuffur 12.07.11 в 15:55 Система страничной подкачки Ogre - это гораздо большее, чем просто работа с ландшафтом. Mingun 26.07.11 в 13:58 |
||
|
Страница может содержать не только Ландшафт, но и другие объекты. wuffur 12.07.11 в 15:55 |
||
|
Дополнительная система пейджинга ландшафта расположена поверх более общей системы пейджинга и DummyPageProvider гарантирует, что ядро системы до сих пор думает, что это загружающиеся страницы и поэтому страницы ландшафта тоже начинают обрабатываться. wuffur 12.07.11 в 16:02 Страничная подкачка ландшафта работает поверх более общей страничной системы и DummyPageProvider гарантирует, что ядро системы всегда думает, что загружает страницы, поэтому страницы кусков ландшафта обрабатываются таким же образом. Mingun 19.10.11 в 16:30 |
+1 | |
|
НЕБО wuffur 12.07.11 в 16:02 |
||
|
Ogre предоставляет три различных типа неба: SkyBoxes, SkyDomes, и SkyPlanes. wuffur 12.07.11 в 16:03 Ogre предоставляет три различных типа неба: SkyBox, SkyDome и SkyPlane. Mingun 19.10.11 в 16:41 |
||
|
Мы детально рассмотрим каждую из них. wuffur 12.07.11 в 16:03 Мы подробно рассмотрим каждый из них. Mingun 19.10.11 в 16:42 |
||
|
SKYBOXES wuffur 12.07.11 в 16:04 SKYBOX-Ы (НЕБЕСНЫЕ КУБЫ) Mingun 19.10.11 в 16:42 |
||
|
Объект SkyBox обычноэто гигантский куб, который окружает все объекты сцены. wuffur 12.07.11 в 16:05 SkyBox – обычно это гигантский куб, который окружает все объекты в сцене. Mingun 23.10.11 в 08:25 |
||
|
Лучший способ описать его - просто показать его вам. wuffur 12.07.11 в 16:06 |
||
|
Добавьте эту линию кода в createScene: wuffur 12.07.11 в 16:06 Добавьте эту строку кода в метод createScene: Mingun 24.07.11 в 12:54 |
