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

1

В этом уроке мы продолжаем предыдущий.

senorit 18.07.11 в 12:04

1

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

senorit 18.07.11 в 12:09

0

ПРЕДПОСЫЛКИ

senorit 18.07.11 в 12:10

0

Этот урок рассчитан на то что вы уже прошли предыдущие предыдущие туториалы Ogre3D.

senorit 18.07.11 в 12:14

1

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

H0tHead 27.09.11 в 11:27

0

ДЛЯ НАЧАЛА

proVIDec 16.07.11 в 12:47

0

Если вы хотите следовать уроку полностью, или просто копировать и вставлять, убедитесь, что все .h файлы выглядят примерно так:

Taredd 26.09.11 в 20:57

0

Вы также должны убедиться, что IntermediateTutorial3.cpp выглядит так.

Taredd 26.09.11 в 20:58

0

Если Вы прошли предыдущие уроки и продолжаете, Ваш код должен выглядеть примерно так.

Taredd 26.09.11 в 20:59

0

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

Taredd 26.09.11 в 21:00

0

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

Taredd 26.09.11 в 21:02

0

Убедитесь, что Вы можете компилировать и запускать код перед тем, как продолжить.

Taredd 26.09.11 в 21:02

0

Все должно работать с точностью как в предыдущем уроке.

Taredd 26.09.11 в 21:03

0

ПОКАЗЫВАЕМ КАКОЙ ОБЪЕКТ ВЫДЕЛЕН

Taredd 26.09.11 в 21:09

0

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

Taredd 26.09.11 в 21:11

0

Мы бы хотели иметь способ дать пользователю понять с каким объектом в данный момент производят манипуляции.

Taredd 26.09.11 в 21:12

0

В игре, нам бы скорее всего хотелось создать некий особый способ подсветки объекта, но для нашего урока (и ваших приложений вплоть до стадии, готовой к релизу), Вы можете использовать метод showBoundingBox, чтобы создать контейнер вокруг объекта.

Taredd 26.09.11 в 21:17

0

Наша основная идея - это выключить отображение bounding box предыдущего объекта и показать bounding box нового объекта.

H0tHead 27.09.11 в 11:28

0

Чтобы сделать это мы добавим следующий код в начало mousePressed функции:

Taredd 27.09.11 в 06:56

0

Затем этот код в самый конец той же функции:

Taredd 27.09.11 в 06:57

0

Теперь mCurrentObject всегда выделен.

Taredd 27.09.11 в 06:58

0

ДОБАВЛЯЕМ НИНДЗЯ

Taredd 27.09.11 в 06:59

0

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

Taredd 27.09.11 в 07:00

0

У нас будет "Режим Робот"("Robot Mode") и "Режим Ниндзя"("Ninja Mode"), которые будут определять какой объект мы хотим разместить в сцене.

Taredd 27.09.11 в 07:02

0

Сделаем пробел клавишей переключения режимов.

Taredd 27.09.11 в 07:02

-1
+1

Для начала настроим IntermediateTutorial так, чтобы он был в Режиме Робот с самого начала.

Taredd 27.09.11 в 07:08

0

Нам понадобится переменная, содержащая статус объекта (размещаем робота или ниндзю?).

Taredd 27.09.11 в 07:09

0

В секцию protected урока IntermediateTutorial добавьте следующую переменную:

Taredd 27.09.11 в 07:11

0

Теперь добавьте этот код в конструктор IntermediateTutorial3:

Taredd 27.09.11 в 07:12

0

Теперь мы в Режиме Робота!

Taredd 27.09.11 в 07:13

0

Если бы это было так просто.

Taredd 27.09.11 в 07:14

0

Теперь, в зависимости от значения переменной bRobotMode, мы должны создать объект Робот или объект Нинзя.

H0tHead 27.09.11 в 11:30

0

Найдите этот код в функции mousePressed:

Taredd 27.09.11 в 07:16

0

Замена должна быть предельно понятной.

Taredd 27.09.11 в 07:16

0

В зависимости от статуса bRobotMode, мы размещаем либо робота, либо ниндзю, и называем его соответсвующе:

Taredd 27.09.11 в 07:19

0

Почти закончили.

Taredd 27.09.11 в 07:20

0

Последняя вещь, которую нам надо сделать, это "повесить" смену режимов на пробел.

Taredd 27.09.11 в 07:21

0

Вернитесь к файлу IntermediateTutorial3.h и переопределите функцию keyPressed () как показано здесь:

H0tHead 27.09.11 в 11:32

0

Теперь давайте заполним функцию в IntermediateTutorial3.cpp.

Taredd 27.09.11 в 07:24

0

Мы должны добавить функциональности клавише "пробел", но при этом мы хотим сохранить функционал базового класса.

H0tHead 27.09.11 в 11:33

0

Так как нам это сделать? Просто, на самом деле тут всего несколько строчек:

Taredd 26.09.11 в 21:35

0

Как видите, мы проверили нажатие на пробел и переключили режим.

oYASo 28.09.11 в 16:20

0

Также мы вызывает функцию BaseApplication keyPressed в операторе возврата, проверяя наш ранее написанный код, а также получая значения для возврата.

oYASo 28.09.11 в 16:26

0

Ну вот и все! Компилируйте и запускайте.

Taredd 27.09.11 в 07:26

0

Теперь вы можете выбирать какой объект поместить, нажимая пробел.

Taredd 26.09.11 в 21:34

0

ВЫБИРАЕМ ОБЪЕКТЫ

Taredd 27.09.11 в 07:26

0

Теперь мы подходим к самой сути урока: использованию RaySceneQueries для выделения объектов в сцене.

Taredd 26.09.11 в 21:30

0

Перед тем как мы начнем вносить изменения в код, я объясню RaySceneQueryResultEntry более детально.

Taredd 26.09.11 в 21:31

0

(Пожалуйста, пройдите по ссылке и кратко просмотрите структуру.)

neutron 06.11.11 в 21:01

0
Минутку...

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