Ogre3D Intermediate Tutorials / Промежуточные туториалы Ogre3D: Intermediate Tutorial 2: RaySceneQueries and Basic Mouse Usage (Part 1 of 2)

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

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

ВВЕДЕНИЕ

proVIDec 16.07.11 в 05:07

1

В этом уроке мы создадим базис, необходимый для любого редактора сцен. В течении урока мы обсудим:

H0tHead 20.09.11 в 10:34

1

1. Как использовать трассировку лучей (RaySceneQuery) для предотвращения "проваливания" камеры сквозь ландшафт.

H0tHead 20.09.11 в 10:36

1

2. Как использовать интерфейсы обработки сообщений от мышки.

H0tHead 20.09.11 в 10:37

0

2. Как использовать интерфейсы MouseListener и MouseMotionListener.

Mingun 21.09.11 в 16:47

1
+1

3. Использование мыши для выбора реальных координат ландшафта X и Y.

H0tHead 20.09.11 в 10:37

0
+1

ПРЕДПОСЫЛКИ

H0tHead 20.09.11 в 10:38

0

Предварительные условия

Mingun 21.09.11 в 16:51

0

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

H0tHead 20.09.11 в 10:40

0

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

Mingun 21.09.11 в 16:51

0

Предполагается, что вы знаете основы манипуляций с объектами в Ogre (узлы сцены, камеры, объекты и т.д.)

H0tHead 20.09.11 в 10:41

0

Предполагается, что вам знакомы базовые объекты Ogre (узлы сцены, сущности и т.д.).

Mingun 21.09.11 в 16:53

0

Поскольку данный урок использует итераторы стандартной библиотеки STL, Вы должны знать что это такое итераторы и уметь их использовать.

H0tHead 20.09.11 в 10:43

0

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

Mingun 21.09.11 в 16:55

0

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

H0tHead 20.09.11 в 10:45

0

(Ogre также широко использует STL внутри себя, так что если вы не знакомы с этой библиотекой, вы должны потратить немного времени на её изучение.)

Mingun 21.09.11 в 16:58

0
+1

Данный урок использует графический интерфейс CEGUI. Вы должны полностью выполнить все шаги в Базовом Руководстве №7 для того, чтобы ваше приложение начало работать правильно.

H0tHead 20.09.11 в 10:48

1

ДЛЯ НАЧАЛА

proVIDec 16.07.11 в 05:07

1

НАЧНЕМ

H0tHead 20.09.11 в 10:46

0

Первое, вы должны создать проект и добавить в него следующий код:

H0tHead 20.09.11 в 10:51

1

Убедитесь, что ваш код компилируется, перед тем как мы двинемся дальше.

H0tHead 20.09.11 в 10:52

0

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

Mingun 21.09.11 в 16:59

0

Поскольку, начиная с версии OGRE 1.7 в его состав не входит графический интерфейс CEGUI, вы должны настроить и сконфигурировать свой проект на использование CEGUI. Не забудьте обновить настроки проекта.

H0tHead 20.09.11 в 10:54

0

В разделе С/С++, добавьте в раздел Дополнительно подключаемые директории путь к файлам CEGUI.

H0tHead 20.09.11 в 10:56

0

В опциях Компоновщика укажите пути к библиотекам CEGUI, а также укажите файлы CEGUIOgreRenderer_d.lib CEGUIBase_d.lib в качестве дополнительных зависимостей. Если вы настраиваете конфигурацию "Релиз" - удалите в именах файлов постфикс "_d".

H0tHead 20.09.11 в 10:59

0

Скопируйте dll библиотеки CEGUI в папку, где их может обнаружить ваш проект или укажите путь к папке BIN в Переменных Окружения.

H0tHead 20.09.11 в 11:01

0

НАСТРОЙКА СЦЕНЫ

H0tHead 20.09.11 в 11:01

0

Перейдем к функции создания сцены ITutorial02::createScene.

H0tHead 20.09.11 в 11:02

0

Этот код должен быть вам знаком.

H0tHead 20.09.11 в 11:03

0

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

H0tHead 20.09.11 в 11:03

0

Добавьте следующее в функцию создания сцены createScene.

H0tHead 20.09.11 в 11:04

0

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

H0tHead 20.09.11 в 11:05

0

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

H0tHead 20.09.11 в 11:06

0

Это очень просто - метод bootstrapSystem() сделает для нас все необходимое.

H0tHead 20.09.11 в 11:07

0

Примеание: этот метод также скажет CEGUI использовать систему управления ресурсами Ogre.

H0tHead 20.09.11 в 11:11

0

Теперь мы покажем курсор. Я не буду объяснять, что делает следующий код. Мы рассмотрим его в следующих уроках.

H0tHead 20.09.11 в 11:11

0

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

H0tHead 20.09.11 в 11:12

0

Скорее всего вам необходимо будет сообщит системе управления ресурсами Ogre о расположении ресурсов CEGUI.

H0tHead 20.09.11 в 11:13

0

Если во время исполнения кода возникли не обрабатываемые исключения, попробуйте добавить следующее в ваш файл resources.cfg.

H0tHead 20.09.11 в 11:14

0

ВВЕДЕНИЕ В МЕНЕДЖЕР КАДРОВ ( FRAMELISTENER )

H0tHead 20.09.11 в 11:15

0

Этого было достаточно для запуска нашего приложения.

H0tHead 20.09.11 в 11:17

0

Менеджер кадров сцены или проще говоря FrameListener сложная часть механизма Ogre. Перед тем как мы начнем реализацию нашего проекта, я потрачу некоторое время на объяснение, того, как мы с помощью FrameListenerа можем достичь желаемого результата.

H0tHead 20.09.11 в 11:21

0

Во-первых, мы хотим "привязать" правую кнопку мыши к обзору камеры. Это довольно неудобно, когда нет возможности использовать мышь для обзора, поэтому мы добавим управление мышью в нашу программу(правда только тогда, когда нажата ее правая клавиша).

H0tHead 20.09.11 в 11:25

0

Примечание: Заготовка урока уже содержит управление камерой, спасибо за это классу sdkCameraMan функционала OgreBites, но ради обучения мы будем реализовывать управление камерой с нуля.

H0tHead 20.09.11 в 11:27

0

Во-вторых. мы хотим сделать так, чтобы камера не проваливалась сквозь наш ландшафт. Это будет наиболее ожидаемым эффектом работы нашей программы.

H0tHead 20.09.11 в 11:29

0

В-третьих, мы хотим добавлять объекты в сцену там, где мы кликнули по ландшафту.

H0tHead 20.09.11 в 11:30

0

Ну и наконец, мы хотим перемещать объекты в сцене.

H0tHead 20.09.11 в 11:30

0

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

H0tHead 20.09.11 в 11:32

0

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

H0tHead 20.09.11 в 11:43

0

Чтобы сделать это, мы будем использовать некоторые защищенные переменные(они уже добавлены в класс).

H0tHead 20.09.11 в 11:44

0

Переменная mRaySceneQuery хранит копию экземпляра класса RaySceneQuery, который мы будем использовать для определения координат ландшафта.

H0tHead 20.09.11 в 11:45

0

Переменные mLMouseDown и mRMouseDown будут отслеживать нажатия кнопок мыши (таким образом, значение mLMouseDown будет true, когда пользователь удерживает нажатой левую кнопку и наоборот )

H0tHead 20.09.11 в 11:48

0

mCount счетчик количества объектов сцены.

H0tHead 20.09.11 в 11:49

0

mCurrentObject содержит указатель на последний созданный узел сцены(SceneNode). Мы будем использовать эту переменную для перемещения объектов.

H0tHead 20.09.11 в 11:50

0

Наконец, mGUIRenderer хранит указатель на рендер CEGUI, который мы будем использовать для обновления состояния CEGUI.

H0tHead 20.09.11 в 11:51

0

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

H0tHead 20.09.11 в 11:53

0

Настройка менеджера кадров сцены.

H0tHead 20.09.11 в 11:53

0

Перейдем к методу createFrameListener() и добавим следующий код после вызова метода базового класса BaseApplication::createFrameListener().

H0tHead 20.09.11 в 11:54

0
Минутку...

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