Ogre3D Intermediate Tutorials / Промежуточные туториалы Ogre3D: Intermediate Tutorial 5: Static Geometry

← →
Английский оригинал Перевод на русский

Сожалеем, но текст оригинала доступен только зарегистрированным пользователям.

Вот пример того, как это делается:

proVIDec 03.10.11 в 07:26

0

Вот пример того, как это сделать:

Mingun 08.10.11 в 06:56

0

Теперь мы готовы создать статическую геометрию.

Mingun 08.10.11 в 06:57

0

ДОБАВЛЕНИЕ СТАТИЧЕСКОЙ ГЕОМЕТРИИ

Mingun 08.10.11 в 07:01

0

Метод createScene() уже заполнен некоторыми вещами.

Mingun 08.10.11 в 07:02

0

Туда уже добавлен код для создания плоскости пола, добавления робота, установки позиции камеры и тому подобное, так как мы уже изучили эти вещи в предыдущих уроках.

Mingun 08.10.11 в 07:04

0

Убедитесь, что понимаете текущее содержание этой функции перед продолжением.

Mingun 08.10.11 в 07:05

0

Первая вещь, которую мы собираемся сделать сейчас - создать сущность, основанную на сетке травы, созданной ранее и создать объект StaticGeometry.

Mingun 08.10.11 в 07:07

0

Обратите внимание, что мы создаем только одну сущность для использования с нашей статической геометрией.

Mingun 08.10.11 в 07:08

0

Найдите метод createScene() и добавьте следующий код в его <b>конец</b>:

Mingun 08.10.11 в 07:08

0

Переменная <code>size</code> определяет, насколько большую область мы покрываем травой, а переменная <code>amount</code> определяет, как много объектов мы поместим в каждый ряд нашего объекта StaticGeometry.

Mingun 08.10.11 в 07:12

0

Следующая вещь, которую нам требуется сделать, это определить размер и начало координат статической геометрии.

Mingun 08.10.11 в 07:16

0

Как только мы создаем объект (вызвав StaticGeometry::build()), мы больше не сможем изменить начало координат или область, определяемую статической геометрией.

Mingun 08.10.11 в 07:17

0

Начало координат поместим в верхний левый угол области, определяемой статической геометрией.

Mingun 08.10.11 в 07:18

0

Если вам нужно разместить статическую геометрию вокруг точки, вы должны установить <code>x</code> и <code>z</code>-координаты начала координат в половину размера области для <code>x</code> и <code>z</code>:

Mingun 08.10.11 в 07:21

0
+1

Это отцентрирует объект вокруг точки (0, 0, 0).

Mingun 08.10.11 в 07:23

0

Для его центровки вокруг точки в 3D пространстве, вы должны сделать нечто вроде этого:

Mingun 08.10.11 в 07:24

0

Где <code>x</code>, <code>y</code> и <code>z</code> &ndash; точка в 3D пространстве, вокруг которой необходимо отцентрировать объект.

Mingun 08.10.11 в 07:26

0

Также обратите внимание, что мы <i>определяем</i> вертикальную высоту объекта, когда задаем область.

Mingun 08.10.11 в 07:28

0
+1

Убедитесь, что <code>y</code> компонент setRegionDimensions() не меньше, чем высочайший объект в статической геометрии.

Mingun 08.10.11 в 07:42

0

Следующая вещь, которую мы должны сделать &ndash; добавить объекты к статической геометрии.

Mingun 08.10.11 в 07:43

0

Следующая часть кода немного сложна, потому что мы добавляем целый газон травы к геометрии и придаем ей случайное смещение по позициям <code>x</code> и <code>z</code>, случайное вращение и случайный масштаб по вертикальной оси.

Mingun 08.10.11 в 07:47

0
+1

В действительности, здесь самой важной для понимания вещью является StaticGeometry::addEntity():

Mingun 08.10.11 в 07:52

0

Функция addEntity() принимает используемую сущность, позицию объекта, ориентацию объекта и его масштаб.

Mingun 08.10.11 в 07:54

0

Когда вы определяете статическую геометрию, вы будете использовать либо функцию addEntity(), либо функцию addSceneNode().

Mingun 08.10.11 в 07:56

0

Функция addSceneNode() проходит по узлу сцены, добавляя все <i>сущности</i> к статической геометрии, используя позицию, ориентацию и масштаб дочерних узлов сцены вместо указания их вручную.

Mingun 08.10.11 в 07:58

0

Обратите внимание, что если вы используете функцию addSceneNode(), убедитесь, что удалили узел из его родителя, так как addSceneNode() не удаляет его для вас.

Mingun 08.10.11 в 07:59

0

Если вы не сделаете этого, Ogre отрисует и статическую геометрию, созданную вами, и оригинальный узел сцены, что не является тем, что вы хотели.

Mingun 08.10.11 в 08:01

0

Наконец, мы должны построить статическую геометрию, прежде чем она будет отображена:

Mingun 08.10.11 в 08:01

0

Скомпилировав и запустив ваше приложение, вы должны увидеть робота, стоящего на маленьком кусочке травы. Посмотрите, как он счастлив :).

Mingun 08.10.11 в 08:04

0

ЗАКЛЮЧЕНИЕ

proVIDec 03.10.11 в 07:26

1

ИЗМЕНЕНИЕ ОБЪЕКТА STATICGEOMETRY

Mingun 08.10.11 в 08:06

0

Однажды создав StaticGeometry, вы, как предполагается, не работаете с ним много, так как в противном случае его ценность стремится к нулю.

Mingun 08.10.11 в 08:10

0

Вы можете, однако, делать вещи, вроде колыхания травы на ветру.

Mingun 08.10.11 в 08:10

0

Если вам интересно, как сделать такое, взгляните на демку травы, которая поставляется с Ogre.

Mingun 08.10.11 в 08:11

0

Функция GrassListener::waveGrass() изменяет траву для выполнения движения, подобного колыханию.

Mingun 08.10.11 в 08:12

0

ПРОДВИНУТАЯ ОБРАБОТКА ОБЪЕКТОВ ПАКЕТАМИ

Mingun 08.10.11 в 08:15

0

Это, естественно, только азы обработки объектов пакетами (object batching).

Mingun 08.10.11 в 08:16

0

Вы должны использовать StaticGeometry в любом случае, когда вы имеете неподвижные объекты, сгруппированные вместе.

Mingun 08.10.11 в 08:18

0

Если вы пытаетесь создать что-то столь же интенсивное или столь же расширяемое, как лес, или пытаетесь добавить траву на огромное количество земли, вы должны взглянуть в сторону более продвинутых техник пакетирования, вроде <b>движка страничной геометрии (PagedGeometry Engine)</b>

Mingun 08.10.11 в 08:21

0
Минутку...

← Предыдущая страница