Ogre3D Intermediate Tutorials / Промежуточные туториалы Ogre3D: Intermediate Tutorial 3: Mouse Picking (3D Object Selection) and SceneQuery Masks (Part 2 of 2)
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
ВВЕДЕНИЕ proVIDec 16.07.11 в 12:47 |
|
|
В этом уроке мы продолжаем предыдущий. senorit 18.07.11 в 12:04 |
||
|
Мы рассмотрим как выделять несколько объектов в сцене используя мышку, и как ограничить выделение определенных объектов. senorit 18.07.11 в 12:09 |
||
|
ПРЕДПОСЫЛКИ senorit 18.07.11 в 12:10 |
||
|
Этот урок рассчитан на то что вы уже прошли предыдущие предыдущие туториалы Ogre3D. senorit 18.07.11 в 12:14 |
||
|
Для прохода по результатам запроса мы будем использовать итераторы стандартной библиотеки STL, так что базовые знание об этом будут очень полезны. H0tHead 27.09.11 в 11:27 |
||
|
ДЛЯ НАЧАЛА proVIDec 16.07.11 в 12:47 |
||
|
Если вы хотите следовать уроку полностью, или просто копировать и вставлять, убедитесь, что все .h файлы выглядят примерно так: Taredd 26.09.11 в 20:57 |
||
|
Вы также должны убедиться, что IntermediateTutorial3.cpp выглядит так. Taredd 26.09.11 в 20:58 |
||
|
Если Вы прошли предыдущие уроки и продолжаете, Ваш код должен выглядеть примерно так. Taredd 26.09.11 в 20:59 |
||
|
В противном случае исправьте его и убедитесь, что он компилируется и успешно запускается. Taredd 26.09.11 в 21:00 |
||
|
Единственное, что может отличаться - это комментарии, также некоторые инициализации переменных были перемещены в конструктор. Taredd 26.09.11 в 21:02 |
||
|
Убедитесь, что Вы можете компилировать и запускать код перед тем, как продолжить. Taredd 26.09.11 в 21:02 |
||
|
Все должно работать с точностью как в предыдущем уроке. Taredd 26.09.11 в 21:03 |
||
|
ПОКАЗЫВАЕМ КАКОЙ ОБЪЕКТ ВЫДЕЛЕН Taredd 26.09.11 в 21:09 |
||
|
В этом уроке мы будем делать так, чтобы вы могли "выбирать" и перемещать объекты после того, как разместили их. Taredd 26.09.11 в 21:11 |
||
|
Мы бы хотели иметь способ дать пользователю понять с каким объектом в данный момент производят манипуляции. Taredd 26.09.11 в 21:12 |
||
|
В игре, нам бы скорее всего хотелось создать некий особый способ подсветки объекта, но для нашего урока (и ваших приложений вплоть до стадии, готовой к релизу), Вы можете использовать метод showBoundingBox, чтобы создать контейнер вокруг объекта. Taredd 26.09.11 в 21:17 |
||
|
Наша основная идея - это выключить отображение bounding box предыдущего объекта и показать bounding box нового объекта. H0tHead 27.09.11 в 11:28 |
||
|
Чтобы сделать это мы добавим следующий код в начало mousePressed функции: Taredd 27.09.11 в 06:56 |
||
|
Затем этот код в самый конец той же функции: Taredd 27.09.11 в 06:57 |
||
|
Теперь mCurrentObject всегда выделен. Taredd 27.09.11 в 06:58 |
||
|
ДОБАВЛЯЕМ НИНДЗЯ Taredd 27.09.11 в 06:59 |
||
|
Теперь мы модифицируем код так, чтобы он не только поддерживал роботов, но также размещал и передвигал ниндзей. Taredd 27.09.11 в 07:00 |
||
|
У нас будет "Режим Робот"("Robot Mode") и "Режим Ниндзя"("Ninja Mode"), которые будут определять какой объект мы хотим разместить в сцене. Taredd 27.09.11 в 07:02 |
||
|
Сделаем пробел клавишей переключения режимов. Taredd 27.09.11 в 07:02 |
+1 | |
|
Для начала настроим IntermediateTutorial так, чтобы он был в Режиме Робот с самого начала. Taredd 27.09.11 в 07:08 |
||
|
Нам понадобится переменная, содержащая статус объекта (размещаем робота или ниндзю?). Taredd 27.09.11 в 07:09 |
||
|
В секцию protected урока IntermediateTutorial добавьте следующую переменную: Taredd 27.09.11 в 07:11 |
||
|
Теперь добавьте этот код в конструктор IntermediateTutorial3: Taredd 27.09.11 в 07:12 |
||
|
Теперь мы в Режиме Робота! Taredd 27.09.11 в 07:13 |
||
|
Если бы это было так просто. Taredd 27.09.11 в 07:14 |
||
|
Теперь, в зависимости от значения переменной bRobotMode, мы должны создать объект Робот или объект Нинзя. H0tHead 27.09.11 в 11:30 |
||
|
Найдите этот код в функции mousePressed: Taredd 27.09.11 в 07:16 |
||
|
Замена должна быть предельно понятной. Taredd 27.09.11 в 07:16 |
||
|
В зависимости от статуса bRobotMode, мы размещаем либо робота, либо ниндзю, и называем его соответсвующе: Taredd 27.09.11 в 07:19 |
||
|
Почти закончили. Taredd 27.09.11 в 07:20 |
||
|
Последняя вещь, которую нам надо сделать, это "повесить" смену режимов на пробел. Taredd 27.09.11 в 07:21 |
||
|
Вернитесь к файлу IntermediateTutorial3.h и переопределите функцию keyPressed () как показано здесь: H0tHead 27.09.11 в 11:32 |
||
|
Теперь давайте заполним функцию в IntermediateTutorial3.cpp. Taredd 27.09.11 в 07:24 |
||
|
Мы должны добавить функциональности клавише "пробел", но при этом мы хотим сохранить функционал базового класса. H0tHead 27.09.11 в 11:33 |
||
|
Так как нам это сделать? Просто, на самом деле тут всего несколько строчек: Taredd 26.09.11 в 21:35 |
||
|
Как видите, мы проверили нажатие на пробел и переключили режим. oYASo 28.09.11 в 16:20 |
||
|
Также мы вызывает функцию BaseApplication keyPressed в операторе возврата, проверяя наш ранее написанный код, а также получая значения для возврата. oYASo 28.09.11 в 16:26 |
||
|
Ну вот и все! Компилируйте и запускайте. Taredd 27.09.11 в 07:26 |
||
|
Теперь вы можете выбирать какой объект поместить, нажимая пробел. Taredd 26.09.11 в 21:34 |
||
|
ВЫБИРАЕМ ОБЪЕКТЫ Taredd 27.09.11 в 07:26 |
||
|
Теперь мы подходим к самой сути урока: использованию RaySceneQueries для выделения объектов в сцене. Taredd 26.09.11 в 21:30 |
||
|
Перед тем как мы начнем вносить изменения в код, я объясню RaySceneQueryResultEntry более детально. Taredd 26.09.11 в 21:31 |
||
|
(Пожалуйста, пройдите по ссылке и кратко просмотрите структуру.) neutron 06.11.11 в 21:01 |
