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

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

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

ВВЕДЕНИЕ

proVIDec 03.10.11 в 07:25

0

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

Mingun 08.10.11 в 03:58

0

Существует немало ситуаций, когда вам нужны объекты на сцене, ну вообще не нуждающиеся в перемещении.

proVIDec 08.10.11 в 10:55

0

Например, если вы не добавляете в движок никакой физики, скалы и деревья вряд ли когда-либо будут перемещаться.

Mingun 08.10.11 в 04:02

0
+3

Для этих ситуаций Ogre предоставляет класс статической геометрии StaticGeometry, который позволяет вам создавать пачки (batch) объектов для отрисовки одной большой группой.

Mingun 08.10.11 в 04:09

0

Это обычно быстрее, чем делать вручную с помощью узлов сцены.

Mingun 08.10.11 в 04:10

0

В этом руководстве мы познакомимся с основами применения статической геометрии в программе.

proVIDec 03.10.11 в 07:36

0

В этом уроке мы рассмотрим основные применения статической геометрии в вашей программе.

Mingun 08.10.11 в 04:11

0

Мы также рассмотрим еще несколько вещей, которые вы можете сделать с помощью ManualObject.

Mingun 08.10.11 в 04:12

0

Смотрите <b>предыдущий урок</b> об использовании ManualObject.

Mingun 08.10.11 в 04:13

0

В этом уроке мы вручную создадим сетку травы и затем добавим большое их количество к объекту статической геометрии в нашей сцене.

Mingun 08.10.11 в 04:14

0

Полный код данного руководства вы можете найти <b>здесь</b>.

proVIDec 03.10.11 в 07:34

0

Полный код данного урока вы сможете найти <b>здесь</b>.

Mingun 08.10.11 в 04:16

0
+1

Так как вы проходите урок, вы должны медленно добавлять код в ваш проект и наблюдать результаты, когда мы собираем его.

Mingun 08.10.11 в 04:18

0

Заметим, что данное руководство в частности основывается на библиотеке GrassDemo, которая есть в готовых образцах Ogre.

proVIDec 03.10.11 в 07:42

-1

Обратите внимание, что этот урок основан на кодовой базе демки Трава (Grass), являющейся частью примеров Ogre.

Mingun 08.10.11 в 04:22

1
+3

Вы также можете покопаться в ее исходниках, чтобы получить более полную информацию.

Mingun 08.10.11 в 04:24

0

ПРЕДВАРИТЕЛЬНЫЕ УСЛОВИЯ

proVIDec 03.10.11 в 07:32

1

Загрузите новый проект с Ogre основой для руководств и приведите ваш проект к такому виду:

proVIDec 03.10.11 в 07:40

0

Создайте новый проект на Каркасе уроков Ogre и настройте его, чтобы он выглядел так:

Mingun 08.10.11 в 04:29

0
+3

Перед тем, как продолжать, убедитесь, что приложение компилируется и запускается.

proVIDec 03.10.11 в 07:33

1

Вы должны увидеть робота, стоящего на плоской поверхности.

proVIDec 03.10.11 в 07:32

1

СОЗДАНИЕ СЦЕНЫ

proVIDec 03.10.11 в 07:25

1

СОЗДАНИЕ СЕТКИ

Mingun 08.10.11 в 04:33

0

Первым делом нам нужно создать сетку травы, которую мы будем отрисовывать.

Mingun 08.10.11 в 04:39

0

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

Mingun 08.10.11 в 04:43

0

Каждый четырехугольник будет иметь текстуру травы на себе, поэтому, с какого бы направления, кроме вертикального, вы на него не посмотрите, он будет немного походить на 3D траву.

Mingun 08.10.11 в 04:48

0

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

Mingun 08.10.11 в 04:54

0

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

Mingun 08.10.11 в 04:57

0

Первым делом объявим некоторые базовые переменные.

Mingun 08.10.11 в 04:58

0

Так как мы собираемся вращать четырехугольник, который мы определим, будет легче, если мы будем для математики использовать конструкции Ogre, такие как Vector3 и Quaternion, вместо попытки выполнить все вручную.

Mingun 08.10.11 в 05:01

0

Наш план - создать Vector3 с координатами X и Z в нем, создать один четырехугольник из него, затем повернуть его с помощью кватерниона и повторить.

Mingun 08.10.11 в 05:06

0

Найдите функцию-член createGrassMesh() и добавьте следующий код:

Mingun 08.10.11 в 05:07

0

Теперь, когда мы подготовили наши переменные, нам нужно начать определение объекта ManualObject.

Mingun 08.10.11 в 05:08

0

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

Mingun 08.10.11 в 05:10

0

Также наша операция визуализации будет установлена в список треугольников, что означает, что после объявления наших вершин мы должны объявить список треугольников, которые создадут грани на нашем четырехугольнике:

Mingun 08.10.11 в 05:17

0

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

Mingun 08.10.11 в 05:19

0

Для каждой вершины мы, кроме того, определим текстурные координаты.

Mingun 08.10.11 в 05:20

0

Текстурные координаты сообщают Ogre, как производить выборку текстуры, которую мы определили в материале Examples/GrassBlades.

Mingun 08.10.11 в 05:22

0

Мы сделаем верхний левый угол точкой (0, 0) на текстуре, нижний правый угол точкой (1, 1) и так далее:

Mingun 08.10.11 в 05:24

0

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

Mingun 08.10.11 в 05:25

0

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

Mingun 08.10.11 в 05:28

0

Для каждого четырехугольника мы создадим два треугольника.

Mingun 08.10.11 в 05:29

0

Первый будет основан вершинами (0, 3, 1), а второй - вершинами (0, 2, 3).

Mingun 08.10.11 в 05:30

0

Это корректно определяет четырехугольник.

Mingun 08.10.11 в 05:32

0

Также вспомните, что мы повторяем действия несколько раз, и каждый раз мы создаем 4 вершины, поэтому мы должны использовать переменную смещения для выбора соответствующей вершины:

Mingun 08.10.11 в 05:39

0

Затем мы должны повернуть вектор, использованный нами при создании текущего четырехугольника и продолжить цикл.

Mingun 08.10.11 в 05:41

0

После того, как цикл завершится, мы должны вызвать ManualObject::end() для завершения объекта:

Mingun 08.10.11 в 05:42

0

Теперь, когда мы имеем описанный объект ManualObject, мы почти готовы начать создавать статическую геометрию.

Mingun 08.10.11 в 06:39

0

Последнее, что мы сделаем, это создадим сетку из нашего ManualObject.

Mingun 08.10.11 в 06:41

0

Сетки чуть более оптимизированы для отрисовки, чем использование объекта ManualObject.

Mingun 08.10.11 в 06:44

0

Для этого нам просто нужно вызвать ManualObject::convertToMesh() с желаемым именем для сохраненной сетки:

Mingun 08.10.11 в 06:47

0

Теперь мы закончили создание сетки травы.

Mingun 08.10.11 в 06:47

0

Обратите внимание, что если вы таким образом создали очень сложную сетку, вы можете сохранить ее в файл и просто загрузить обратно вместо пересоздания объекта ManualObject каждый раз во время загрузки программы.

Mingun 08.10.11 в 06:51

0

Чтобы сделать это, мы берем возвращаемое значение convertToMesh() (которое отбрасывается в рабочем коде) и передаем возвращенную им сетку в функцию MeshSerializer::exportMesh().

Mingun 08.10.11 в 06:55

0
Минутку...

Следующая страница →