Ogre3D Intermediate Tutorials / Промежуточные туториалы Ogre3D: Intermediate Tutorial 5: Static Geometry
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
Вот пример того, как это делается: proVIDec 03.10.11 в 07:26 Вот пример того, как это сделать: Mingun 08.10.11 в 06:56 |
|
|
Теперь мы готовы создать статическую геометрию. Mingun 08.10.11 в 06:57 |
||
|
ДОБАВЛЕНИЕ СТАТИЧЕСКОЙ ГЕОМЕТРИИ Mingun 08.10.11 в 07:01 |
||
|
Метод createScene() уже заполнен некоторыми вещами. Mingun 08.10.11 в 07:02 |
||
|
Туда уже добавлен код для создания плоскости пола, добавления робота, установки позиции камеры и тому подобное, так как мы уже изучили эти вещи в предыдущих уроках. Mingun 08.10.11 в 07:04 |
||
|
Убедитесь, что понимаете текущее содержание этой функции перед продолжением. Mingun 08.10.11 в 07:05 |
||
|
Первая вещь, которую мы собираемся сделать сейчас - создать сущность, основанную на сетке травы, созданной ранее и создать объект StaticGeometry. Mingun 08.10.11 в 07:07 |
||
|
Обратите внимание, что мы создаем только одну сущность для использования с нашей статической геометрией. Mingun 08.10.11 в 07:08 |
||
|
Найдите метод createScene() и добавьте следующий код в его <b>конец</b>: Mingun 08.10.11 в 07:08 |
||
|
Переменная <code>size</code> определяет, насколько большую область мы покрываем травой, а переменная <code>amount</code> определяет, как много объектов мы поместим в каждый ряд нашего объекта StaticGeometry. Mingun 08.10.11 в 07:12 |
||
|
Следующая вещь, которую нам требуется сделать, это определить размер и начало координат статической геометрии. Mingun 08.10.11 в 07:16 |
||
|
Как только мы создаем объект (вызвав StaticGeometry::build()), мы больше не сможем изменить начало координат или область, определяемую статической геометрией. Mingun 08.10.11 в 07:17 |
||
|
Начало координат поместим в верхний левый угол области, определяемой статической геометрией. Mingun 08.10.11 в 07:18 |
||
|
Если вам нужно разместить статическую геометрию вокруг точки, вы должны установить <code>x</code> и <code>z</code>-координаты начала координат в половину размера области для <code>x</code> и <code>z</code>: Mingun 08.10.11 в 07:21 |
+1 | |
|
Это отцентрирует объект вокруг точки (0, 0, 0). Mingun 08.10.11 в 07:23 |
||
|
Для его центровки вокруг точки в 3D пространстве, вы должны сделать нечто вроде этого: Mingun 08.10.11 в 07:24 |
||
|
Где <code>x</code>, <code>y</code> и <code>z</code> – точка в 3D пространстве, вокруг которой необходимо отцентрировать объект. Mingun 08.10.11 в 07:26 |
||
|
Также обратите внимание, что мы <i>определяем</i> вертикальную высоту объекта, когда задаем область. Mingun 08.10.11 в 07:28 |
+1 | |
|
Убедитесь, что <code>y</code> компонент setRegionDimensions() не меньше, чем высочайший объект в статической геометрии. Mingun 08.10.11 в 07:42 |
||
|
Следующая вещь, которую мы должны сделать – добавить объекты к статической геометрии. Mingun 08.10.11 в 07:43 |
||
|
Следующая часть кода немного сложна, потому что мы добавляем целый газон травы к геометрии и придаем ей случайное смещение по позициям <code>x</code> и <code>z</code>, случайное вращение и случайный масштаб по вертикальной оси. Mingun 08.10.11 в 07:47 |
+1 | |
|
В действительности, здесь самой важной для понимания вещью является StaticGeometry::addEntity(): Mingun 08.10.11 в 07:52 |
||
|
Функция addEntity() принимает используемую сущность, позицию объекта, ориентацию объекта и его масштаб. Mingun 08.10.11 в 07:54 |
||
|
Когда вы определяете статическую геометрию, вы будете использовать либо функцию addEntity(), либо функцию addSceneNode(). Mingun 08.10.11 в 07:56 |
||
|
Функция addSceneNode() проходит по узлу сцены, добавляя все <i>сущности</i> к статической геометрии, используя позицию, ориентацию и масштаб дочерних узлов сцены вместо указания их вручную. Mingun 08.10.11 в 07:58 |
||
|
Обратите внимание, что если вы используете функцию addSceneNode(), убедитесь, что удалили узел из его родителя, так как addSceneNode() не удаляет его для вас. Mingun 08.10.11 в 07:59 |
||
|
Если вы не сделаете этого, Ogre отрисует и статическую геометрию, созданную вами, и оригинальный узел сцены, что не является тем, что вы хотели. Mingun 08.10.11 в 08:01 |
||
|
Наконец, мы должны построить статическую геометрию, прежде чем она будет отображена: Mingun 08.10.11 в 08:01 |
||
|
Скомпилировав и запустив ваше приложение, вы должны увидеть робота, стоящего на маленьком кусочке травы. Посмотрите, как он счастлив :). Mingun 08.10.11 в 08:04 |
||
|
ЗАКЛЮЧЕНИЕ proVIDec 03.10.11 в 07:26 |
||
|
ИЗМЕНЕНИЕ ОБЪЕКТА STATICGEOMETRY Mingun 08.10.11 в 08:06 |
||
|
Однажды создав StaticGeometry, вы, как предполагается, не работаете с ним много, так как в противном случае его ценность стремится к нулю. Mingun 08.10.11 в 08:10 |
||
|
Вы можете, однако, делать вещи, вроде колыхания травы на ветру. Mingun 08.10.11 в 08:10 |
||
|
Если вам интересно, как сделать такое, взгляните на демку травы, которая поставляется с Ogre. Mingun 08.10.11 в 08:11 |
||
|
Функция GrassListener::waveGrass() изменяет траву для выполнения движения, подобного колыханию. Mingun 08.10.11 в 08:12 |
||
|
ПРОДВИНУТАЯ ОБРАБОТКА ОБЪЕКТОВ ПАКЕТАМИ Mingun 08.10.11 в 08:15 |
||
|
Это, естественно, только азы обработки объектов пакетами (object batching). Mingun 08.10.11 в 08:16 |
||
|
Вы должны использовать StaticGeometry в любом случае, когда вы имеете неподвижные объекты, сгруппированные вместе. Mingun 08.10.11 в 08:18 |
||
|
Если вы пытаетесь создать что-то столь же интенсивное или столь же расширяемое, как лес, или пытаетесь добавить траву на огромное количество земли, вы должны взглянуть в сторону более продвинутых техник пакетирования, вроде <b>движка страничной геометрии (PagedGeometry Engine)</b> Mingun 08.10.11 в 08:21 |
