Ogre3D Basic Tutorials / Базовые туториалы Ogre3D: Basic Tutorial 2: Cameras, Lights, and Shadows
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
ВВЕДЕНИЕ В ТУТОРИАЛ alexx_x 08.07.11 в 11:10 ВВЕДЕНИЕ Mingun 21.07.11 в 16:59 |
|
|
Содержание этой статьи в основном имеет отношение к свету (объекты Light) и тому, как они используются для создания теней. alexx_x 08.07.11 в 11:12 Этот урок в основном посвящён вопросам работы с источниками света (объекты Light) и созданию теней с их помощью. Mingun 21.07.11 в 17:01 |
||
|
Также мы расскажем основные принципы работы камер (Camera). alexx_x 08.07.11 в 11:12 Также в нём освещаются основные принципы работы камер (объекты Camera). Mingun 21.07.11 в 17:03 |
||
|
ДЛЯ НАЧАЛА proVIDec 29.06.11 в 08:28 С ЧЕГО НАЧАТЬ Mingun 20.07.11 в 16:47 |
||
|
Как и в прошлой статье мы возьмем за основу уже готовый код. alexx_x 08.07.11 в 11:13 |
||
|
К классу BaseTurtorial2 мы добавим два новых метода createViewport и createCamera. alexx_x 08.07.11 в 11:14 К нашему классу BasicTutorial2 мы добавим два новых метода: createViewport и createCamera. Mingun 19.07.11 в 17:34 |
+3 | |
|
Эти две функции уже были определены в конструкции класса BaseAplication, но в этом руководстве мы теперь будет смотреть на них, чтобы увидеть как объекты Camera и Viewport в действительности создаются и используются. wuffur 08.07.11 в 16:20 Эти две функции уже были определены в базовом классе BaseAplication, но в этом руководстве мы теперь будем смотреть на них, чтобы увидеть как объекты Camera и Viewport в действительности создаются и используются. cin 12.07.11 в 12:41 Эти две функции уже определены в базовом классе BaseAplication, но в этом руководстве мы рассмотрим их поподробнее, чтобы увидеть, как в действительности создаются и используются объекты Camera и Viewport (область просмотра). Mingun 19.07.11 в 17:31 |
+1 | |
|
Добавим определение методов сreateCamera и creatViewports в заголовочный файл класса нашего вводного руководства 2. wuffur 08.07.11 в 16:22 Добавим определение методов createCamera() и createViewports() в заголовочный файл нашего класса: Mingun 12.10.11 в 12:58 |
+2 | |
|
Затем добавим реализацию этих функций. alexx_x 18.07.11 в 10:06 |
||
|
КАМЕРЫ proVIDec 29.06.11 в 08:28 |
||
|
КАМЕРЫ В OGRE proVIDec 29.06.11 в 12:00 КАМЕРЫ OGRE Mingun 12.10.11 в 13:00 |
||
|
Камера в OGRE, это то что мы используем, чтобы видеть всю сцену, которую мы создали. wuffur 08.07.11 в 13:35 Камера (класса Camera) – это объект, который мы используем, чтобы увидеть созданную нами сцену. Mingun 12.10.11 в 13:02 |
||
|
Объект Camera, это специальный объект, работа которого похожа на работу объекта SceneNode wuffur 08.07.11 в 13:36 Камера – это особый объект, чья работа схоже с функцией узлов сцены. Mingun 12.10.11 в 13:07 |
||
|
У объекта Camera есть функции setPosition, yaw, roll и pitch и вы можете прикрепить его к любому объекту SceneNode. wuffur 08.07.11 в 13:37 У объекта Camera есть функции установки позиции (setPosition), углов рысканья (yaw), крена (roll) и тангажа (pitch), вы также можете прикрепить его к любому узлу сцены. Mingun 12.10.11 в 13:13 Объект Camera имеет функции установки позиции (setPosition) и углов поворота по осям X (yaw), Y (roll) и Z (pitch), также вы можете прикрепить его к любому узлу сцены. PoqXert 16.11.11 в 07:36 |
+1 | |
|
Как и у объекта SceneNodes, позиция объекта Camera зависит от его предков (хорошо уважать старших %) wuffur 08.07.11 в 13:39 Как и у объектов SceneNode, позиция камеры зависит от ее родителей (хорошо уважать старших %). Mingun 12.10.11 в 13:15 |
||
|
Для всех движений и поворотов, вы можете по умолчанию считать, что объект Camera, это объект SceneNode. wuffur 08.07.11 в 13:40 При любых перемещениях и поворотах вы можете рассматривать камеру как узел сцены. Mingun 12.10.11 в 13:17 |
||
|
Одна вещь в камерах OGRE отличается от того, что вы могли бы ожидать, и она состоит в том, что вам следует использовать только одну камеру за раз.(в текущей версии OGRE) wuffur 08.07.11 в 13:44 Есть одно замечание о камерах Ogre, которое вы, вероятно, не ожидали: вы можете использовать только одну камеру в каждый момент времени (в текущей версии (<i>прим. пер:</i> 1.7 и ранее, в более поздних версиях может измениться)). Mingun 12.10.11 в 13:21 |
||
|
Таким образом, вы не создаете одну камеру для просмотра какой-то части сцены, вторую для просмотра другой части сцены, а затем включаете и выключаете камеру основываясь на том, какую часть сцены нам нужно выводить. wuffur 08.07.11 в 13:47 То есть, вы не можете создать одну камеру для просмотра одной части сцены, вторую для просмотра другой части и переключаться между ними в зависимости от части сцены, которую нужно отобразить. Mingun 12.10.11 в 13:23 |
||
|
Напротив, способом сделать это является создание объектов SceneNode который действует, как "держатель камер". wuffur 08.07.11 в 13:48 Вместо этого это делается с помощью создания узлов сцены, выступающих в роли "держателей камер". Mingun 12.10.11 в 13:27 |
||
|
Эти объекты SceneNodes просто сидят на сцене и указывают на то место куда вы бы хотели смотреть камерой. cin 12.07.11 в 12:44 Эти узлы сцены просто находятся на сцене и указывают на точку, которую камера хотела бы обозреть. Mingun 12.10.11 в 13:29 |
||
|
И когда наступает время вывести кусок сцены(Scene), камера просто прикрепляет себя к соответствующему объекту SceneNode. wuffur 08.07.11 в 13:50 Когда наступает время отобразить необходимую часть сцены, камера просто присоединяется к соответствующему узлу сцены. Mingun 12.10.11 в 13:30 |
||
|
Мы еще вернемся к этой методике в руководстве по FrameListener. wuffur 08.07.11 в 13:51 Мы еще вернемся к этой технике в уроке, посвященном слушателям кадров (объектам класса FrameListener). Mingun 12.10.11 в 13:33 |
||
|
СОЗДАНИЕ КАМЕРЫ proVIDec 29.06.11 в 08:28 |
||
|
Мы будем переопределять метод по умолчанию, который класс BaseApplication использует для создания объекта Сamera. wuffur 08.07.11 в 14:26 Мы переопределим стандартный метод, который BaseApplication использует для создания камеры. Mingun 12.10.11 в 13:34 |
||
|
Найдем функцию член createCamera класса BasicTutorial2(BasicTutorial2::createCamera) wuffur 08.07.11 в 14:27 Найдите функцию-член BasicTutorial2::createCamera(). Mingun 12.10.11 в 13:34 |
||
|
Первой вещью, которую мы собираемся сделать будет создание объекта Camera. wuffur 08.07.11 в 14:28 Первым нашим делом будет создание объекта Camera. Mingun 12.10.11 в 13:35 |
||
|
Поскольку объекты Camera привязаны к объекту SceneManager в котором они находятся, мы будем использовать SceneManager, чтобы создать их. wuffur 08.07.11 в 16:25 Поскольку камеры привязаны к менеджеру сцены, в котором они находятся, мы используем объект SceneManager для их создания. Mingun 12.10.11 в 13:36 |
||
|
Добавьте строку кода, чтобы создать объект Camera: wuffur 08.07.11 в 16:26 Добавьте эту строку кода для создания камеры: Mingun 12.10.11 в 13:38 |
||
|
Эта строка создает объект Camera с именем "PlayerCam". wuffur 08.07.11 в 16:26 Она создает камеру с именем "PlayerCam". Mingun 12.10.11 в 13:38 |
||
|
Отметим, что вы можете использовать функцию из SceneManager для того, чтобы брать объекты типа Camera основываясь на их имени, если вы решили не держать в памяти указатель на них. wuffur 08.07.11 в 16:28 Обратите внимание, что вы можете использовать функцию getCamera() менеджера сцены для получения камер по их имени, если вы решите не хранить указатель на них. Mingun 12.10.11 в 13:40 |
||
|
Следующей вещью, которую мы собираемся сделать будет указание положения объекта Сamera и как она будет стоять перед сценой. wuffur 08.07.11 в 16:31 Следующим шагом будет установка позиции камеры и направления ее обзора. Mingun 12.10.11 в 13:41 |
||
|
Мы будем ставить объекты вокруг начала координат, поэтому мы расположим камеру на приличном расстояние по положительном направлении оси z, лицом к началу координат. wuffur 08.07.11 в 16:33 Мы будем размещать объекты вокруг начала координат, так что поместим камеру на приличном расстоянии в направлении +z и заставим ее смотреть на начало координат. Mingun 12.10.11 в 13:43 |
||
|
Добавьте код после предыдущего куска: wuffur 08.07.11 в 16:33 Добавьте это код после предыдущего: Mingun 12.10.11 в 13:43 |
||
|
Функция lookAt довольно изящна. wuffur 08.07.11 в 16:34 |
||
|
Вы можете направить и расположить Камеру как вы хотите, вместо того, чтобы указывать здесь положительное направление вращения вокруг всех трех осей(yaw, rotate и pitch). wuffur 08.07.11 в 16:36 Вы можете направить камеру в любую интересующую вас точку вместо указания углов рысканья, крена и тангажа (yaw, roll и pitch). Mingun 12.10.11 в 13:48 Вы можете направить камеру на любую интересующую вас точку вместо указания углов поворота по осям (yaw, roll и pitch). PoqXert 16.11.11 в 12:05 |
||
|
У объекта SceneNodes также есть эта функция, которая может поставит объекты Entities перед правильным направлением намного проще во многих случаях. wuffur 08.07.11 в 16:37 Объекты SceneNode также имеют эту функцию, которая может сделать настройку направления взгляда сущностей в верном направлении более простым в большинстве случаев. Mingun 12.10.11 в 13:50 Объекты SceneNode также имеют эту функцию, которая может упростить настройку поворота объекта в большенстве случаев. PoqXert 16.11.11 в 12:09 |
||
|
И наконец мы поставим ближнее расстояние отсечение картины в 5 единиц. wuffur 08.07.11 в 16:41 И наконец, мы установим ближнюю плоскость отсечения в 5 единиц. Mingun 12.10.11 в 13:53 И наконец, мы установим расстояние до ближней плоскости отсечения равным 5 единиц. PoqXert 16.11.11 в 12:12 |
+1 | |
|
Дистанция отсечения Камеры определяет как далеко или близко может что-либо быть до того, как вы их больше не увидите. wuffur 08.07.11 в 16:46 Плоскость отсечения камеры определяет, как близко или далеко надо быть от чего-нибудь, чтобы перестать его видеть. Mingun 12.10.11 в 13:57 Всё, что находится ближе ближней или дальше дальней плоскостей отсечения, мы не будем видеть. PoqXert 16.11.11 в 12:17 |
||
|
Установка ближайшей границы отсечения облегчает способность видеть сквозь сущность на картине, когда камера расположена слишком близко к ним. wuffur 08.07.11 в 16:49 Установка ближней плоскости отсечения легко позволяет видеть сквозь сущности на экране, когда вы слишком близко к ним. Mingun 12.10.11 в 14:13 |
||
|
Альтернативой является расположить камеру так близко к объекту, что он заполнит всю картину и вы не увидите ничего кроме маленькой порции ее. wuffur 08.07.11 в 16:50 В противном случае, находясь так близко к объекту, он заполонит весь экран и вы не сможете увидеть ничего, кроме его крохотной части. Mingun 12.10.11 в 14:16 |
||
|
Вы можете так же поставить дальнюю границу отсечения. wuffur 08.07.11 в 16:51 Вы также можете установить дальнюю плоскость отсечения. Mingun 12.10.11 в 14:17 Вы также можете установить расстояние до дальней плоскости отсечения. PoqXert 16.11.11 в 12:21 |
||
|
Это убережет ваш движок от рендеринга всего, что находится за данным значением. wuffur 08.07.11 в 16:51 Это убережет движок от отрисовки всего, что находится дальше этого значения. Mingun 12.10.11 в 14:19 |
||
|
Это в основном используется для увеличения частоты кадров, если вы используете рендеринг на большом количестве вещей на экране на очень длинных дистанциях. wuffur 08.07.11 в 16:53 Прежде всего это используется для увеличения частоты кадров, если вы отрисовываете большое количество вещей на экране при очень больших расстояниях. Mingun 12.10.11 в 14:22 |
||
|
Чтобы установить ближнюю границу отсечения, добавьте следующую линию: wuffur 08.07.11 в 16:53 Для установки ближней плоскости отсечения добавьте эту строку: Mingun 12.10.11 в 14:23 Для установки расстояния до ближней плоскости отсечения добавте строку: PoqXert 16.11.11 в 12:25 |
||
|
Установление ближней границы отсечение просто является аналогичным вызову метода setFarClipDistance (хотя вам и не нужно использовать дальнюю границу отсечения с использование теней трафарета (Stencil Shadows), которые будут использоваться в этом руководстве). wuffur 08.07.11 в 17:02 Установка дальней плоскости отсечения производится аналогично, вызовом setFarClipDistance (хотя вы не должны использовать дальнюю плоскость отсечения со стенсильными тенями, которые мы будем использовать в этом уроке). Mingun 12.10.11 в 14:34 |
||
|
Теперь, поскольку мы переопределили функцию createCamera, нам нужно создать метод класса OgreBites::SdkCameraMan(контроллер камеры), используя нашу вновь сконструированную камеру. wuffur 08.07.11 в 17:03 Теперь, поскольку мы переопределили функцию createCamera(), нам нужно создать OgreBites::SdkCameraMan (контроллер камеры), используя нашу только что созданную камеру: Mingun 12.10.11 в 14:38 |
||
|
Функция createCamera теперь выглядит так: wuffur 08.07.11 в 17:04 Функция createCamera() теперь выглядит так: Mingun 12.10.11 в 14:40 |
||
|
VIEWPORTS wuffur 08.07.11 в 17:04 ОБЛАСТИ ПРОСМОТРА Mingun 20.07.11 в 16:47 ОБЛАСТИ ПРОСМОТРА (VIEWPORTS) PoqXert 16.11.11 в 12:29 |
||
|
OGRE VIEWPORTS wuffur 08.07.11 в 17:04 ОБЛАСТИ ПРОСМОТРА В OGRE Mingun 20.07.11 в 16:47 ОБЛАСТИ ПРОСМОТРА (VIEWPORTS) В OGRE PoqXert 16.11.11 в 12:29 |
||
|
Когда вы начнете работать с многочисленными камерами, представление класса Viewport станет для вас намного более полезным. wuffur 08.07.11 в 17:06 Когда вы начнете работать с несколькими камерами одновременно, понятие класса Viewport станет для вас намного более полезным. Mingun 20.07.11 в 16:49 Когда вы начнете работать с несколькими камерами одновременно, класс Viewport станет для вас более полезным. PoqXert 16.11.11 в 12:37 |
+1 |
