Ogre3D Intermediate Tutorials / Промежуточные туториалы Ogre3D: Intermediate Tutorial 2: RaySceneQueries and Basic Mouse Usage (Part 1 of 2)
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
ВВЕДЕНИЕ proVIDec 16.07.11 в 05:07 |
|
|
В этом уроке мы создадим базис, необходимый для любого редактора сцен. В течении урока мы обсудим: H0tHead 20.09.11 в 10:34 |
||
|
1. Как использовать трассировку лучей (RaySceneQuery) для предотвращения "проваливания" камеры сквозь ландшафт. H0tHead 20.09.11 в 10:36 |
||
|
2. Как использовать интерфейсы обработки сообщений от мышки. H0tHead 20.09.11 в 10:37 2. Как использовать интерфейсы MouseListener и MouseMotionListener. Mingun 21.09.11 в 16:47 |
+1 | |
|
3. Использование мыши для выбора реальных координат ландшафта X и Y. H0tHead 20.09.11 в 10:37 |
+1 | |
|
ПРЕДПОСЫЛКИ H0tHead 20.09.11 в 10:38 Предварительные условия Mingun 21.09.11 в 16:51 |
||
|
Предполагается, что вы знаете как настроить и скомпилировать Ogre - проект. H0tHead 20.09.11 в 10:40 Этот урок предполагает, что вы уже знаете, как настроить проект, использующий Ogre и заставить его успешно компилироваться. Mingun 21.09.11 в 16:51 |
||
|
Предполагается, что вы знаете основы манипуляций с объектами в Ogre (узлы сцены, камеры, объекты и т.д.) H0tHead 20.09.11 в 10:41 Предполагается, что вам знакомы базовые объекты Ogre (узлы сцены, сущности и т.д.). Mingun 21.09.11 в 16:53 |
||
|
Поскольку данный урок использует итераторы стандартной библиотеки STL, Вы должны знать что это такое итераторы и уметь их использовать. H0tHead 20.09.11 в 10:43 Вы также должны иметь представление об основных итераторах STL, поскольку они используются в этом уроке. Mingun 21.09.11 в 16:55 |
||
|
Поскольку Огр широко использует возможности STL, вы должны знать, как работать с STL. иначе вам придется потратить немного времени на ее освоение. H0tHead 20.09.11 в 10:45 (Ogre также широко использует STL внутри себя, так что если вы не знакомы с этой библиотекой, вы должны потратить немного времени на её изучение.) Mingun 21.09.11 в 16:58 |
+1 | |
|
Данный урок использует графический интерфейс CEGUI. Вы должны полностью выполнить все шаги в Базовом Руководстве №7 для того, чтобы ваше приложение начало работать правильно. H0tHead 20.09.11 в 10:48 |
||
|
ДЛЯ НАЧАЛА proVIDec 16.07.11 в 05:07 НАЧНЕМ H0tHead 20.09.11 в 10:46 |
||
|
Первое, вы должны создать проект и добавить в него следующий код: H0tHead 20.09.11 в 10:51 |
||
|
Убедитесь, что ваш код компилируется, перед тем как мы двинемся дальше. H0tHead 20.09.11 в 10:52 Перед продолжением убедитесь, что этот код компилируется. Mingun 21.09.11 в 16:59 |
||
|
Поскольку, начиная с версии OGRE 1.7 в его состав не входит графический интерфейс CEGUI, вы должны настроить и сконфигурировать свой проект на использование CEGUI. Не забудьте обновить настроки проекта. H0tHead 20.09.11 в 10:54 |
||
|
В разделе С/С++, добавьте в раздел Дополнительно подключаемые директории путь к файлам CEGUI. H0tHead 20.09.11 в 10:56 |
||
|
В опциях Компоновщика укажите пути к библиотекам CEGUI, а также укажите файлы CEGUIOgreRenderer_d.lib CEGUIBase_d.lib в качестве дополнительных зависимостей. Если вы настраиваете конфигурацию "Релиз" - удалите в именах файлов постфикс "_d". H0tHead 20.09.11 в 10:59 |
||
|
Скопируйте dll библиотеки CEGUI в папку, где их может обнаружить ваш проект или укажите путь к папке BIN в Переменных Окружения. H0tHead 20.09.11 в 11:01 |
||
|
НАСТРОЙКА СЦЕНЫ H0tHead 20.09.11 в 11:01 |
||
|
Перейдем к функции создания сцены ITutorial02::createScene. H0tHead 20.09.11 в 11:02 |
||
|
Этот код должен быть вам знаком. H0tHead 20.09.11 в 11:03 |
||
|
если вы не понимаете, что здесь происходит, прочитайте API документацию перед тем как продолжать. H0tHead 20.09.11 в 11:03 |
||
|
Добавьте следующее в функцию создания сцены createScene. H0tHead 20.09.11 в 11:04 |
||
|
Итак, мы создали базовую геометрию, теперь необходимо подключить курсор. H0tHead 20.09.11 в 11:05 |
||
|
Для этого мы будем использовать вызовы методов CEGUI, но перед тем как мы это сделаем, нам необходимо запустить графический интерфейс CEGUI. H0tHead 20.09.11 в 11:06 |
||
|
Это очень просто - метод bootstrapSystem() сделает для нас все необходимое. H0tHead 20.09.11 в 11:07 |
||
|
Примеание: этот метод также скажет CEGUI использовать систему управления ресурсами Ogre. H0tHead 20.09.11 в 11:11 |
||
|
Теперь мы покажем курсор. Я не буду объяснять, что делает следующий код. Мы рассмотрим его в следующих уроках. H0tHead 20.09.11 в 11:11 |
||
|
Если вы скомпилируете и запустите проект, вы увидите курсор в центре экрана, но он еще не будет двигаться. H0tHead 20.09.11 в 11:12 |
||
|
Скорее всего вам необходимо будет сообщит системе управления ресурсами Ogre о расположении ресурсов CEGUI. H0tHead 20.09.11 в 11:13 |
||
|
Если во время исполнения кода возникли не обрабатываемые исключения, попробуйте добавить следующее в ваш файл resources.cfg. H0tHead 20.09.11 в 11:14 |
||
|
ВВЕДЕНИЕ В МЕНЕДЖЕР КАДРОВ ( FRAMELISTENER ) H0tHead 20.09.11 в 11:15 |
||
|
Этого было достаточно для запуска нашего приложения. H0tHead 20.09.11 в 11:17 |
||
|
Менеджер кадров сцены или проще говоря FrameListener сложная часть механизма Ogre. Перед тем как мы начнем реализацию нашего проекта, я потрачу некоторое время на объяснение, того, как мы с помощью FrameListenerа можем достичь желаемого результата. H0tHead 20.09.11 в 11:21 |
||
|
Во-первых, мы хотим "привязать" правую кнопку мыши к обзору камеры. Это довольно неудобно, когда нет возможности использовать мышь для обзора, поэтому мы добавим управление мышью в нашу программу(правда только тогда, когда нажата ее правая клавиша). H0tHead 20.09.11 в 11:25 |
||
|
Примечание: Заготовка урока уже содержит управление камерой, спасибо за это классу sdkCameraMan функционала OgreBites, но ради обучения мы будем реализовывать управление камерой с нуля. H0tHead 20.09.11 в 11:27 |
||
|
Во-вторых. мы хотим сделать так, чтобы камера не проваливалась сквозь наш ландшафт. Это будет наиболее ожидаемым эффектом работы нашей программы. H0tHead 20.09.11 в 11:29 |
||
|
В-третьих, мы хотим добавлять объекты в сцену там, где мы кликнули по ландшафту. H0tHead 20.09.11 в 11:30 |
||
|
Ну и наконец, мы хотим перемещать объекты в сцене. H0tHead 20.09.11 в 11:30 |
||
|
Это мы сделаем с помощью нажатия и удержания левой кнопки мыши на объекте и перемещения его в нужное нам место. H0tHead 20.09.11 в 11:32 |
||
|
Отпуская кнопку мыши мы оставляем его там, куда переместили. H0tHead 20.09.11 в 11:43 |
||
|
Чтобы сделать это, мы будем использовать некоторые защищенные переменные(они уже добавлены в класс). H0tHead 20.09.11 в 11:44 |
||
|
Переменная mRaySceneQuery хранит копию экземпляра класса RaySceneQuery, который мы будем использовать для определения координат ландшафта. H0tHead 20.09.11 в 11:45 |
||
|
Переменные mLMouseDown и mRMouseDown будут отслеживать нажатия кнопок мыши (таким образом, значение mLMouseDown будет true, когда пользователь удерживает нажатой левую кнопку и наоборот ) H0tHead 20.09.11 в 11:48 |
||
|
mCount счетчик количества объектов сцены. H0tHead 20.09.11 в 11:49 |
||
|
mCurrentObject содержит указатель на последний созданный узел сцены(SceneNode). Мы будем использовать эту переменную для перемещения объектов. H0tHead 20.09.11 в 11:50 |
||
|
Наконец, mGUIRenderer хранит указатель на рендер CEGUI, который мы будем использовать для обновления состояния CEGUI. H0tHead 20.09.11 в 11:51 |
||
|
Также заметим, что мы будем использовать множество функций, относящихся к обработке сообщений мыши. таким образом мы перегрузим их для обеспечения управления камерой. H0tHead 20.09.11 в 11:53 |
||
|
Настройка менеджера кадров сцены. H0tHead 20.09.11 в 11:53 |
||
|
Перейдем к методу createFrameListener() и добавим следующий код после вызова метода базового класса BaseApplication::createFrameListener(). H0tHead 20.09.11 в 11:54 |
