Ogre3D Basic Tutorials / Базовые туториалы Ogre3D: Basic Tutorial 1: An introduction to the most basic Ogre constructs: SceneManager, SceneNode, and Entity objects.
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
Вернемся к коду который мы создали ранее. alexx_x 06.07.11 в 13:23 |
|
|
Найдем метод TutorialApplication::createScene. alexx_x 06.07.11 в 13:23 |
||
|
Как мы упоминали ранее, в этом туторе мы будем изменять только код содержащийся в этой функции. alexx_x 06.07.11 в 13:24 |
||
|
Первое что мы сделаем, это установим уровень освещенности самой сцены (ambient light) чтобы видеть результаты нашего труда. alexx_x 06.07.11 в 13:25 |
||
|
Для этого вызываем функцию setAmbientLight и указываем нужный нам цвет. alexx_x 06.07.11 в 13:26 |
||
|
Конструктор ColorValue принимает три параметра (RGB) для красного, зеленого и голубого составляющего цвета, в промежутке от 0 до 1. alexx_x 06.07.11 в 13:28 |
||
|
Добавим этот кусок кода к createScene: alexx_x 06.07.11 в 13:28 |
||
|
Следующее что мы сделаем, это создадим Entity (сущность). alexx_x 06.07.11 в 13:30 |
||
|
Вызываем метод createEntity объекта SceneManager. alexx_x 06.07.11 в 13:31 |
||
|
У вас наверняка возникли некоторые вопросы. alexx_x 06.07.11 в 13:31 |
||
|
Первый откуда взялся mSceneMgr, и что за параметры мы передаем в функцию. alexx_x 06.07.11 в 13:34 |
||
|
Переменная mSceneMgr является ссылкой на текущий объект класса SceneManager. alexx_x 06.07.11 в 13:35 |
||
|
Первый параметр функции createEntity это название объекта который мы созадем. alexx_x 06.07.11 в 13:36 |
||
|
Все экземпляры Entity должны иметь уникальное название. alexx_x 06.07.11 в 13:36 |
||
|
При попытке создать два объекта с одинаковым именем, возникнет ошибка. alexx_x 06.07.11 в 13:37 |
||
|
Параметр "ogrehead.mesh" указывает меш (проще говоря сохраненную 3d модель) которая будет использована при создании объекта). alexx_x 06.07.11 в 13:38 |
||
|
В нашем случае "ogrehead.mesh" поставляется вместе с Ogre SDK. alexx_x 06.07.11 в 13:38 |
||
|
Загрузка ресурсов будет описана в следующих статьях. alexx_x 06.07.11 в 13:39 |
||
|
Сейчас мы используем для загрузки ресурсов класс BaseApplication. alexx_x 06.07.11 в 13:40 |
||
|
Итак объект Entity мы создали, теперь нам необходимо создать объект SceneNode к которой мы прикрепим наш Entity. alexx_x 06.07.11 в 13:41 |
||
|
Каждый SceneManager имеет корневую SceneNode, мы создадим дочернюю к нему SceneNode. alexx_x 06.07.11 в 13:43 |
||
|
Это длинное выражение сперва вызывает функцию getRootSceneNode текущего объекта SceneManager. alexx_x 07.07.11 в 06:57 |
||
|
Затем он вызывает функцию createChildSceneNode корневой SceneNode. alexx_x 07.07.11 в 06:58 |
||
|
Параметр передаваемый функции createChildSceneNode это имя SceneNode которую мы создаем. alexx_x 07.07.11 в 06:58 |
||
|
Как и Entity, два экземпляра SceneNode не могут иметь одинаковые имена. alexx_x 07.07.11 в 09:17 |
||
|
И наконец мы присоединяем Entity к SceneNode для того чтобы указать голове огра место где оно будет рендерится. alexx_x 07.07.11 в 09:18 |
||
|
Все готово, скомпилируйте и запустите ваше приложение. alexx_x 07.07.11 в 09:18 |
||
|
Вы должны увидеть голову огра на вашем экране. alexx_x 07.07.11 в 09:19 |
||
|
КООРДИНАТЫ И ВЕКТОРА alexx_x 07.07.11 в 09:19 |
||
|
Перед тем как мы пойдем дальше, нужно объяснить систему оконных координат и классы Ogre Vector. alexx_x 07.07.11 в 09:20 |
||
|
Ogre (подобно многим графическим движкам) использует координатные оси X и Z для горизонтальных плоскостей, и Y для вертикальной координаты. alexx_x 07.07.11 в 09:22 |
||
|
Как вы сейчас видите на мониторе, ось X проходит слева направо, с правой стороны положительная часть оси. alexx_x 07.07.11 в 09:24 |
||
|
Ось Y проходит снизу вверх, сверху положительная часть оси. alexx_x 07.07.11 в 09:24 |
||
|
Ось Z берет свое начало глубоко в недрах монитора и проходит сквозь вашу переносицу ) alexx_x 07.07.11 в 09:25 |
||
|
Голова огра сейчас обращена прямо к нам по направлению оси Z. alexx_x 07.07.11 в 09:26 |
||
|
Это складывается из свойств меша и направления и позиции камеры. alexx_x 07.07.11 в 09:27 |
||
|
Камеры рассматриваются в следующих туториалах, пока стоит понимать что координаты головы огра на позиции (0,0,0). alexx_x 07.07.11 в 12:22 Камеры рассматривается позже в этом руководстве, но сейчас стоит понимать, что голова огра находится в начале координат (0,0,0) и мы видим ее спереди разными способами. wuffur 09.07.11 в 13:22 |
+1 | |
|
Ориентация головы была задана когда она создавалась в пакете 3D моделирования. alexx_x 07.07.11 в 12:24 |
||
|
Ogre не может предполагать как ориентирована ваша модель. alexx_x 07.07.11 в 12:25 |
||
|
Каждый меш который мы загружаем может быть ориентирован по разному. alexx_x 07.07.11 в 12:26 |
||
|
Информацию о расположении и ориентация Ogre хранит в классах Vector. alexx_x 07.07.11 в 12:27 |
||
|
Векторы определены в трех классах для 2 (Vector2), 3 (Vector3) и 4 (Vector4) измерений, из них чаще всего используется Vector3. alexx_x 07.07.11 в 12:28 |
||
|
Если вы незнакомы с векторами, стоит освежить их в памяти прежде делать что нибудь серьезное. alexx_x 07.07.11 в 12:29 |
||
|
Вся эта векторная математика будет довольно серьезным подспорьем, когда вы перейдете к более сложным приложениям. alexx_x 07.07.11 в 12:31 |
||
|
ДОБАВЛЯЕМ ЕЩЕ ОДИН ОБЪЕКТ alexx_x 07.07.11 в 12:31 |
||
|
Поняв как работает система координат, вернемся к нашему коду. alexx_x 07.07.11 в 12:31 |
||
|
Ни в одной из тех трех строк что мы написали, нигде не указано точное расположение головы огра. alexx_x 07.07.11 в 12:32 |
||
|
Большинство функций в Ogre используют для этого значения по умолчанию. alexx_x 07.07.11 в 12:33 |
||
|
Для примера функция SceneNode::createChildSceneNode имеет три параметра: название SceneNode, ее позиция и дефолтовую ориентацию. alexx_x 07.07.11 в 12:34 |
||
|
Позиция, как вы уже убедились, имеет координаты (0,0,0). alexx_x 07.07.11 в 12:35 |
