Ogre3D Basic Tutorials / Базовые туториалы Ogre3D: Basic Tutorial 2: Cameras, Lights, and Shadows

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

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

ВВЕДЕНИЕ В ТУТОРИАЛ

В этой статье мы расскажем о базовых возможностях Ogre и более углубленно пройдемся по предыдущему материалу.

alexx_x 08.07.11 в 11:10

1

ВВЕДЕНИЕ

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

Mingun 21.07.11 в 16:59

2

Содержание этой статьи в основном имеет отношение к свету (объекты Light) и тому, как они используются для создания теней.

alexx_x 08.07.11 в 11:12

0

Этот урок в основном посвящён вопросам работы с источниками света (объекты Light) и созданию теней с их помощью.

Mingun 21.07.11 в 17:01

4

Также мы расскажем основные принципы работы камер (Camera).

alexx_x 08.07.11 в 11:12

2

Также в нём освещаются основные принципы работы камер (объекты Camera).

Mingun 21.07.11 в 17:03

2

ДЛЯ НАЧАЛА

proVIDec 29.06.11 в 08:28

2

С ЧЕГО НАЧАТЬ

Mingun 20.07.11 в 16:47

0

Как и в прошлой статье мы возьмем за основу уже готовый код.

alexx_x 08.07.11 в 11:13

3

К классу BaseTurtorial2 мы добавим два новых метода createViewport и createCamera.

alexx_x 08.07.11 в 11:14

2

К нашему классу BasicTutorial2 мы добавим два новых метода: createViewport и createCamera.

Mingun 19.07.11 в 17:34

0
+3

Эти две функции уже были определены в конструкции класса BaseAplication, но в этом руководстве мы теперь будет смотреть на них, чтобы увидеть как объекты Camera и Viewport в действительности создаются и используются.

wuffur 08.07.11 в 16:20

0

Эти две функции уже были определены в базовом классе BaseAplication, но в этом руководстве мы теперь будем смотреть на них, чтобы увидеть как объекты Camera и Viewport в действительности создаются и используются.

cin 12.07.11 в 12:41

2

Эти две функции уже определены в базовом классе BaseAplication, но в этом руководстве мы рассмотрим их поподробнее, чтобы увидеть, как в действительности создаются и используются объекты Camera и Viewport (область просмотра).

Mingun 19.07.11 в 17:31

3
+1

Добавим определение методов сreateCamera и creatViewports в заголовочный файл класса нашего вводного руководства 2.

wuffur 08.07.11 в 16:22

0

Добавим определение методов createCamera() и createViewports() в заголовочный файл нашего класса:

Mingun 12.10.11 в 12:58

3
+2

Затем добавим реализацию этих функций.

alexx_x 18.07.11 в 10:06

1

КАМЕРЫ

proVIDec 29.06.11 в 08:28

2

КАМЕРЫ В OGRE

proVIDec 29.06.11 в 12:00

0

КАМЕРЫ OGRE

Mingun 12.10.11 в 13:00

2

Камера в OGRE, это то что мы используем, чтобы видеть всю сцену, которую мы создали.

wuffur 08.07.11 в 13:35

0

Камера (класса Camera) – это объект, который мы используем, чтобы увидеть созданную нами сцену.

Mingun 12.10.11 в 13:02

3

Объект Camera, это специальный объект, работа которого похожа на работу объекта SceneNode

wuffur 08.07.11 в 13:36

3

Камера – это особый объект, чья работа схоже с функцией узлов сцены.

Mingun 12.10.11 в 13:07

0

У объекта Camera есть функции setPosition, yaw, roll и pitch и вы можете прикрепить его к любому объекту SceneNode.

wuffur 08.07.11 в 13:37

0

У объекта Camera есть функции установки позиции (setPosition), углов рысканья (yaw), крена (roll) и тангажа (pitch), вы также можете прикрепить его к любому узлу сцены.

Mingun 12.10.11 в 13:13

1

Объект Camera имеет функции установки позиции (setPosition) и углов поворота по осям X (yaw), Y (roll) и Z (pitch), также вы можете прикрепить его к любому узлу сцены.

PoqXert 16.11.11 в 07:36

0
+1

Как и у объекта SceneNodes, позиция объекта Camera зависит от его предков (хорошо уважать старших %)

wuffur 08.07.11 в 13:39

1

Как и у объектов SceneNode, позиция камеры зависит от ее родителей (хорошо уважать старших %).

Mingun 12.10.11 в 13:15

0

Для всех движений и поворотов, вы можете по умолчанию считать, что объект Camera, это объект SceneNode.

wuffur 08.07.11 в 13:40

0

При любых перемещениях и поворотах вы можете рассматривать камеру как узел сцены.

Mingun 12.10.11 в 13:17

1

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

wuffur 08.07.11 в 13:44

0

Есть одно замечание о камерах Ogre, которое вы, вероятно, не ожидали: вы можете использовать только одну камеру в каждый момент времени (в текущей версии (<i>прим. пер:</i> 1.7 и ранее, в более поздних версиях может измениться)).

Mingun 12.10.11 в 13:21

1

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

wuffur 08.07.11 в 13:47

0

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

Mingun 12.10.11 в 13:23

0

Напротив, способом сделать это является создание объектов SceneNode который действует, как "держатель камер".

wuffur 08.07.11 в 13:48

0

Вместо этого это делается с помощью создания узлов сцены, выступающих в роли "держателей камер".

Mingun 12.10.11 в 13:27

1

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

cin 12.07.11 в 12:44

0

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

Mingun 12.10.11 в 13:29

0

И когда наступает время вывести кусок сцены(Scene), камера просто прикрепляет себя к соответствующему объекту SceneNode.

wuffur 08.07.11 в 13:50

0

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

Mingun 12.10.11 в 13:30

1

Мы еще вернемся к этой методике в руководстве по FrameListener.

wuffur 08.07.11 в 13:51

1

Мы еще вернемся к этой технике в уроке, посвященном слушателям кадров (объектам класса FrameListener).

Mingun 12.10.11 в 13:33

0

СОЗДАНИЕ КАМЕРЫ

proVIDec 29.06.11 в 08:28

1

Мы будем переопределять метод по умолчанию, который класс BaseApplication использует для создания объекта Сamera.

wuffur 08.07.11 в 14:26

0

Мы переопределим стандартный метод, который BaseApplication использует для создания камеры.

Mingun 12.10.11 в 13:34

0

Найдем функцию член createCamera класса BasicTutorial2(BasicTutorial2::createCamera)

wuffur 08.07.11 в 14:27

0

Найдите функцию-член BasicTutorial2::createCamera().

Mingun 12.10.11 в 13:34

0

Первой вещью, которую мы собираемся сделать будет создание объекта Camera.

wuffur 08.07.11 в 14:28

0

Первым нашим делом будет создание объекта Camera.

Mingun 12.10.11 в 13:35

1

Поскольку объекты Camera привязаны к объекту SceneManager в котором они находятся, мы будем использовать SceneManager, чтобы создать их.

wuffur 08.07.11 в 16:25

0

Поскольку камеры привязаны к менеджеру сцены, в котором они находятся, мы используем объект SceneManager для их создания.

Mingun 12.10.11 в 13:36

0

Добавьте строку кода, чтобы создать объект Camera:

wuffur 08.07.11 в 16:26

0

Добавьте эту строку кода для создания камеры:

Mingun 12.10.11 в 13:38

1

Эта строка создает объект Camera с именем "PlayerCam".

wuffur 08.07.11 в 16:26

0

Она создает камеру с именем "PlayerCam".

Mingun 12.10.11 в 13:38

1

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

wuffur 08.07.11 в 16:28

0

Обратите внимание, что вы можете использовать функцию getCamera() менеджера сцены для получения камер по их имени, если вы решите не хранить указатель на них.

Mingun 12.10.11 в 13:40

1

Следующей вещью, которую мы собираемся сделать будет указание положения объекта Сamera и как она будет стоять перед сценой.

wuffur 08.07.11 в 16:31

0

Следующим шагом будет установка позиции камеры и направления ее обзора.

Mingun 12.10.11 в 13:41

1

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

wuffur 08.07.11 в 16:33

0

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

Mingun 12.10.11 в 13:43

0

Добавьте код после предыдущего куска:

wuffur 08.07.11 в 16:33

0

Добавьте это код после предыдущего:

Mingun 12.10.11 в 13:43

1

Функция lookAt довольно изящна.

wuffur 08.07.11 в 16:34

3

Вы можете направить и расположить Камеру как вы хотите, вместо того, чтобы указывать здесь положительное направление вращения вокруг всех трех осей(yaw, rotate и pitch).

wuffur 08.07.11 в 16:36

0

Вы можете направить камеру в любую интересующую вас точку вместо указания углов рысканья, крена и тангажа (yaw, roll и pitch).

Mingun 12.10.11 в 13:48

0

Вы можете направить камеру на любую интересующую вас точку вместо указания углов поворота по осям (yaw, roll и pitch).

PoqXert 16.11.11 в 12:05

0

У объекта SceneNodes также есть эта функция, которая может поставит объекты Entities перед правильным направлением намного проще во многих случаях.

wuffur 08.07.11 в 16:37

0

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

Mingun 12.10.11 в 13:50

0

Объекты SceneNode также имеют эту функцию, которая может упростить настройку поворота объекта в большенстве случаев.

PoqXert 16.11.11 в 12:09

0

И наконец мы поставим ближнее расстояние отсечение картины в 5 единиц.

wuffur 08.07.11 в 16:41

-1

И наконец, мы установим ближнюю плоскость отсечения в 5 единиц.

Mingun 12.10.11 в 13:53

0

И наконец, мы установим расстояние до ближней плоскости отсечения равным 5 единиц.

PoqXert 16.11.11 в 12:12

0
+1

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

wuffur 08.07.11 в 16:46

0

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

Mingun 12.10.11 в 13:57

0

Всё, что находится ближе ближней или дальше дальней плоскостей отсечения, мы не будем видеть.

PoqXert 16.11.11 в 12:17

0

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

wuffur 08.07.11 в 16:49

-1

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

Mingun 12.10.11 в 14:13

0

Альтернативой является расположить камеру так близко к объекту, что он заполнит всю картину и вы не увидите ничего кроме маленькой порции ее.

wuffur 08.07.11 в 16:50

-1

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

Mingun 12.10.11 в 14:16

0

Вы можете так же поставить дальнюю границу отсечения.

wuffur 08.07.11 в 16:51

0

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

Mingun 12.10.11 в 14:17

0

Вы также можете установить расстояние до дальней плоскости отсечения.

PoqXert 16.11.11 в 12:21

0

Это убережет ваш движок от рендеринга всего, что находится за данным значением.

wuffur 08.07.11 в 16:51

0

Это убережет движок от отрисовки всего, что находится дальше этого значения.

Mingun 12.10.11 в 14:19

1

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

wuffur 08.07.11 в 16:53

0

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

Mingun 12.10.11 в 14:22

0

Чтобы установить ближнюю границу отсечения, добавьте следующую линию:

wuffur 08.07.11 в 16:53

-1

Для установки ближней плоскости отсечения добавьте эту строку:

Mingun 12.10.11 в 14:23

0

Для установки расстояния до ближней плоскости отсечения добавте строку:

PoqXert 16.11.11 в 12:25

0

Установление ближней границы отсечение просто является аналогичным вызову метода setFarClipDistance (хотя вам и не нужно использовать дальнюю границу отсечения с использование теней трафарета (Stencil Shadows), которые будут использоваться в этом руководстве).

wuffur 08.07.11 в 17:02

0

Установка дальней плоскости отсечения производится аналогично, вызовом setFarClipDistance (хотя вы не должны использовать дальнюю плоскость отсечения со стенсильными тенями, которые мы будем использовать в этом уроке).

Mingun 12.10.11 в 14:34

0

Теперь, поскольку мы переопределили функцию createCamera, нам нужно создать метод класса OgreBites::SdkCameraMan(контроллер камеры), используя нашу вновь сконструированную камеру.

wuffur 08.07.11 в 17:03

0

Теперь, поскольку мы переопределили функцию createCamera(), нам нужно создать OgreBites::SdkCameraMan (контроллер камеры), используя нашу только что созданную камеру:

Mingun 12.10.11 в 14:38

1

Функция createCamera теперь выглядит так:

wuffur 08.07.11 в 17:04

2

Функция createCamera() теперь выглядит так:

Mingun 12.10.11 в 14:40

1

VIEWPORTS

wuffur 08.07.11 в 17:04

0

ОБЛАСТИ ПРОСМОТРА

Mingun 20.07.11 в 16:47

0

ОБЛАСТИ ПРОСМОТРА (VIEWPORTS)

PoqXert 16.11.11 в 12:29

0

OGRE VIEWPORTS

wuffur 08.07.11 в 17:04

0

ОБЛАСТИ ПРОСМОТРА В OGRE

Mingun 20.07.11 в 16:47

0

ОБЛАСТИ ПРОСМОТРА (VIEWPORTS) В OGRE

PoqXert 16.11.11 в 12:29

0

Когда вы начнете работать с многочисленными камерами, представление класса Viewport станет для вас намного более полезным.

wuffur 08.07.11 в 17:06

-1

Когда вы начнете работать с несколькими камерами одновременно, понятие класса Viewport станет для вас намного более полезным.

Mingun 20.07.11 в 16:49

0

Когда вы начнете работать с несколькими камерами одновременно, класс Viewport станет для вас более полезным.

PoqXert 16.11.11 в 12:37

0
+1
Минутку...

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