Ogre3D Basic Tutorials / Базовые туториалы Ogre3D: Basic Tutorial 2: Cameras, Lights, and Shadows
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
Теперь нам нужно определить плоскость, которую мы можем использовать в приложении. wuffur 09.07.11 в 13:35 Теперь нам надо зарегистрировать плоскость, чтобы мы могли использовать ее в своем приложении. Mingun 15.10.11 в 11:46 |
|
|
Класс MeshManager содержит следы всех сеток, которые мы загрузили в приложение(например, это содержит след robot.mesh и ninja.mesh, которые мы использовали) wuffur 09.07.11 в 13:48 Класс MeshManager отслеживает все загруженные нашим приложением меши (например следит за robot.mesh и ninja.mesh которые мы использовали). alexx_x 15.07.11 в 06:46 Класс MeshManager отслеживает все загруженные нашим приложением сетки (например, следит за использованными нами сетками robot.mesh и ninja.mesh). Mingun 20.07.11 в 14:18 |
+5 | |
|
Функция-член createPlane принимает значение и делает сетку из параметров. wuffur 09.07.11 в 13:50 Функция-член createPlane() принимает определение плоскости и создает сетку на основе своих параметров. Mingun 15.10.11 в 11:49 |
||
|
Это регистрирует нашу плоскость для использования: ghostintheshell 10.07.11 в 21:31 Она регистрирует нашу плоскость для использования. Mingun 15.10.11 в 11:50 |
||
|
И снова, мы не будем глубоко вникать в специфические особенности того, как использовать MeshManager (обратитесь к соответствующему разделу API если вам нужно увидеть, что в точности делает каждый параметр) wuffur 10.07.11 в 20:52 И снова, мы не будем глубоко вникать в специфические особенности того, как использовать MeshManager (обратитесь к соответствующему разделу API, если вам нужно увидеть, что в точности означает каждый параметр). Mingun 20.07.11 в 14:22 |
||
|
В основном мы зарегистрировали плоскость, чтобы она была 1500 к 1500 в размере, и новый mesh назвали "землей" ghostintheshell 10.07.11 в 21:32 Мы просто создали плоскость размером 1500x1500 и называли этот меш "ground". alexx_x 13.07.11 в 08:29 Мы просто создали плоскость размером 1500 на 1500 условных единиц и назвали получившуюся сетку "ground". Mingun 20.07.11 в 14:24 |
||
|
Теперь, мы можем создать сущность из этого mesh и поместить ее в сцену: ghostintheshell 10.07.11 в 21:33 Теперь мы можем создать объект Entity из этой сетки и поместить его в сцену: Mingun 20.07.11 в 14:25 |
||
|
замечательно ха? Есть еще две вещи, которые мы должны сделать с нашей землей прежде, чем мы закончим с ней. ghostintheshell 10.07.11 в 21:35 Замечательно, да? Однако, прежде чем мы закончим, мы должны сделать ещё две вещи с нашей землёй. Mingun 20.07.11 в 14:28 |
||
|
во первых нужно сказать SceneManager, что мы не хотим, чтобы он бросил тени, так как это - то, что используется для теней, чтобы спроецировать. ghostintheshell 10.07.11 в 21:36 Во первых нужно сказать SceneManager, что мы не хотим чтобы наш объект ground отбрасывал тень, так как он предназначен для того чтобы тени отбрасывались на него. alexx_x 13.07.11 в 08:30 Во-первых, нужно сообщить менеджеру сцены, что мы не хотим, чтобы земля отбрасывала тень, поскольку она должна её принимать. Mingun 20.07.11 в 14:31 |
+1 | |
|
Вторая вещь, это то что мы должны поместить текстуру в нее. ghostintheshell 10.07.11 в 21:36 Во вторых, мы должны наложить текстуру на нашу плоскость. alexx_x 13.07.11 в 08:31 Во-вторых, мы должны наложить на неё текстуру. Mingun 20.07.11 в 14:32 |
+1 | |
|
mesh ниндзя уже имеет материальный сценарий определённый для него. ghostintheshell 10.07.11 в 21:37 Скрипт материала уже определен как для меша робота так и для ниндзи. alexx_x 13.07.11 в 08:33 Сетки робота и ниндзя уже имеют определенные для них материалы. Mingun 20.07.11 в 14:34 |
+2 | |
|
Когда мы вручную создали mesh земли, мы не определяли какую текстуру использовать на ней. ghostintheshell 10.07.11 в 21:38 Когда мы создавали mesh нашей земли, мы не указали какую текстуру он будет использовать. alexx_x 13.07.11 в 08:34 Когда же мы вручную создавали сетку нашей земли, мы не определили, какую текстуру она будет использовать. Mingun 20.07.11 в 14:35 |
||
|
. Мы будем использовать сценарий материала "Examples/Rockwall", который Людоед включает с его образцами: ghostintheshell 10.07.11 в 21:38 Мы будем использовать материал "Examples/Rockwall" который идет с примерами Ogre. alexx_x 13.07.11 в 08:35 |
+1 | |
|
Это - то, как функция createScene до сих пор выглядит: ghostintheshell 10.07.11 в 21:38 Вот так должна выглядеть наша функция createScene в данный момент: Mingun 20.07.11 в 14:37 |
||
|
Теперь, когда у нас есть Ниндзя и земля на сцене, давайте компиилировать и запускать программу. ghostintheshell 10.07.11 в 21:39 Теперь, когда в сцене есть Ниндзя и земля, давайте скомпилируем и запустим программу. Mingun 20.07.11 в 14:40 |
||
|
И мы видим... ничего! proVIDec 03.07.11 в 03:29 И мы увидим... ничего! Mingun 22.07.11 в 13:57 И ничего мы не увидим :-D alexx_x 27.07.11 в 13:36 |
||
|
Что такое? В предыдущей обучающей программе мы добавили сущности, и они были на экране. ghostintheshell 10.07.11 в 21:40 Что же произошло? В предыдущем уроке мы добавляли Роботов и они нормально отображались. Mingun 22.07.11 в 14:00 |
||
|
Причина, по котокой Ниндзя нет, состоит в том, что рассеянный свет сцены задан полной темнотой. ghostintheshell 10.07.11 в 21:40 Причина, по которой Ниндзя не показывается, состоит в том, что окружающее освещение сцены установлено в полную темноту. Mingun 20.07.11 в 14:44 |
||
|
Так что давайте добавим свет, чтобы видеть то, что продолжается. ghostintheshell 10.07.11 в 21:41 Так что давайте добавим свет, чтобы видеть содержимое нашей сцены. alexx_x 13.07.11 в 08:36 Так что давайте добавим источник света, чтобы видеть, что происходит. Mingun 20.07.11 в 14:45 |
||
|
Типы Огней ghostintheshell 10.07.11 в 21:41 ТИПЫ ОСВЕЩЕНИЯ alexx_x 13.07.11 в 08:37 ТИПЫ ИСТОЧНИКОВ СВЕТА Mingun 20.07.11 в 14:45 |
||
|
Есть три типа освещения которые Людоед, обеспечивает. ghostintheshell 10.07.11 в 21:42 Есть три типа освещения которые может использовать Ogre. alexx_x 13.07.11 в 08:37 Ogre предоставляет три типа источников света. Mingun 20.07.11 в 14:47 |
||
|
точечные (Ogre::Light::LT_POINT) – точечные огни излучают свет в каждом направлении одинаково. ghostintheshell 10.07.11 в 21:42 Точечный (Ogre::Light::LT_POINT) - точечные источники света излучают свет во всех направлениях. Mingun 20.07.11 в 14:47 |
||
|
прожектор (тип источника света в трёхмерной компьютерной графике Spotlight ) (Ogre::Light::LT_SPOTLIGHT) - прожектор работает точно как реальный прожектор. У Вас есть положение, где свет начинается, и затем свет достигает пика в направлении. ghostintheshell 10.07.11 в 21:43 Spotlight (тип источника света в трёхмерной компьютерной графике) (Ogre::Light::LT_SPOTLIGHT) - работает точно также как прожектор. Вы задаете позицию и направление излучаемого света. alexx_x 13.07.11 в 08:38 Прожектор (Ogre::Light::LT_SPOTLIGHT) - работает точно также, как прожектор. Вы задаёте позицию источника света и направление, в котором свет будет излучаться. Mingun 20.07.11 в 14:49 |
+2 | |
|
Вы также можете сообщить свету, насколько большой угол(рассеивания света?) использовать во внешнем круге света и внутреннем круге света(Ну, вы знаете, что (flashlight) импульсный источник света ярче в середине, а потом становится ярче после определенной точки) wuffur 11.07.11 в 04:53 Вы также можете задать углы, которые определяют размеры внутреннего и внешнего круга света (вы ведь знаете, что свет от прожектора наиболее ярок в центре, а начиная с некоторого момента начинает затухать?). Mingun 20.07.11 в 14:53 |
+1 | |
|
Направленный (Ogre::Light::LT_DIRECTIONAL) - направленный свет моделирует далекий свет, который попадает на все в сцене по направлению. Скажем, у Вас есть ночная сцена времени, и Вы хотите моделировать лунный свет. ghostintheshell 10.07.11 в 21:47 Directional (Ogre::Light::LT_DIRECTIONAL) - Направленный свет эмулирует далекий источник света такой как солнце или луна, так что он освещает все содержимое сцены под одним углом. alexx_x 13.07.11 в 08:40 Направленный (Ogre::Light::LT_DIRECTIONAL) - направленный источник света моделирует свет от очень далекого объекта, который приходит в сцену с одного направления. Скажем, для ночной сцены это может быть лунный свет. Mingun 20.07.11 в 14:56 |
||
|
Вы могли сделать это, устанавливая рассеянный свет для сцены, но это не вполне реалистично, так как луна не освещает все одинаково (чего не делает солнце). ghostintheshell 10.07.11 в 21:48 Вы могли бы сделать подобный эффект установкой окружающего освещения в сцене, однако это было бы не слишком реалистично, поскольку луна не освещает все одинаково (тоже самое касается солнца). Mingun 20.07.11 в 15:00 |
||
|
Один способ сделать это - установить направленный свет и место в направлении, где луна будет сиять. ghostintheshell 10.07.11 в 21:48 Один из способов добиться требуемого состоит в том, чтобы использовать направленное освещение и установить ему то направление, откуда приходит свет луны. Mingun 20.07.11 в 15:03 |
||
|
У огней есть широкий диапазон свойств, которые описывают, как свет выглядит. второе из самых важных свойств света - его рассеянный цвет. Каждый сценарий материала определяет, сколько разбросанного и зеркального освещения материал отражает, мы изучим, как управлять этим в более поздней обучающей программе. ghostintheshell 10.07.11 в 21:49 У огней есть широкий диапазон свойств, которые описывают, как свет выглядит. Вторым из наиболее важный свойств света, является его рассеивание и цвет зеркального отражения. Каждый скрипт материала определяет, сколько рассеивания у материала и как материал отражает зеркальный свет, управление которым мы будем изучать в одном из следующих руководств. wuffur 16.07.11 в 08:49 Источники света обладают обширным набором свойств, которые определяют, как выглядит данный источник. Два из них являются наиболее важными – это цвета рассеянного (diffuse) и бликового (specular) освещения. Каждый скрипт материала определяет, сколько рассеянного и бликового освещения отражает материал; управление данными свойствами мы изучим в одном из следующих уроков. Mingun 20.07.11 в 15:13 |
+2 | |
|
Создание Огней ghostintheshell 10.07.11 в 21:49 СОЗДАНИЯ ОСВЕЩЕНИЯ wuffur 16.07.11 в 08:51 СОЗДАНИЕ ИСТОЧНИКОВ СВЕТА Mingun 20.07.11 в 15:14 |
||
|
Чтобы создать Свет в Людоеде, мы вызываем createLight SceneManager членская функция и добавляем имя света, очень похоже на то, как мы создаем сущность или Камеру. ghostintheshell 10.07.11 в 21:50 Чтобы создать освещение в Ogre мы вызываем функцию-член createLight класса SceneManager и называем свет, это очень похоже на то, как создается объект Entity или Camera. wuffur 16.07.11 в 08:58 Для создания источника света в Ogre мы вызываем метод createLight объекта SceneManager и передаём ему имя источника света – все очень похоже на то, как создаются объекты Entity или Camera. Mingun 20.07.11 в 15:16 |
+1 | |
|
После того, как мы создаем Свет, мы можем или установить положение его вручную или приложить его к SceneNode для движения. ghostintheshell 10.07.11 в 21:50 После того, как мы создадим освещение, мы также можем установить его позицию вручную или прикрепить его к SceneNode для движения. wuffur 16.07.11 в 09:01 После создания источника света мы можем вручную установить ему позицию, либо присоединить к узлу сцены, чтобы потом его можно было перемещать. Mingun 20.07.11 в 15:18 |
||
|
В отличие от объекта Камеры, у света только есть setPosition и setDirection (а не полный набор функций движения как translate, pitch, yaw, roll, и т.д.). ghostintheshell 10.07.11 в 21:54 В отличии от объекта Camera, источник света имеет только методы setPosition и setDirection (а не полный набор функций для перемещения, вроде translate, pitch, yaw, roll и т.д.). Mingun 20.07.11 в 15:20 |
||
|
Так, если Вы должны создать постоянный свет, Вы должны вызвать setPosition членскую функцию. ghostintheshell 10.07.11 в 21:55 Таким образом если вам необходимо создать стационарный источник света, воспользуйтесь функцей setPosition. alexx_x 13.07.11 в 08:51 |
+3 | |
|
Если Вы нуждаетесь в свете, чтобы двигаться (такой как создание света, который следует за персонажем), то Вы должны приложить это к SceneNode вместо этого. ghostintheshell 10.07.11 в 21:55 Если вам нужно перемещать ваш источник света (к примеру создать источник света который перемещается вслед за персонажем), необходимо прикрепить его к SceneNode. alexx_x 13.07.11 в 09:15 Если же вам нужно перемещать источник света (к примеру, создать источник света, следующий за персонажем), вы должны присоединить его к объекту SceneNode. Mingun 20.07.11 в 15:24 |
||
|
Так, давайте начнем со Света основной точки. ghostintheshell 10.07.11 в 21:56 Тогда давайте начнем с основного точечного света. wuffur 18.07.11 в 16:06 Итак, давайте начнем с самого основного источника света – точечного. Mingun 20.07.11 в 15:24 |
||
|
сделаем, создадим свет, установим его тип, и установим его положение: ghostintheshell 10.07.11 в 21:56 Первое, что мы сделаем - это создадим свет, установим его тип, и установим его положение. wuffur 18.07.11 в 16:07 Первое, что мы сделаем – создадим источник света, установим его тип и позицию: Mingun 20.07.11 в 15:25 |
||
|
Теперь, когда мы создали свет, мы можем выбрать его разбросанный и зеркальный цвет. Давайте сделаем его красным: ghostintheshell 10.07.11 в 21:56 Теперь, когда мы создали свет, мы можем выбрать его рассеяние и зеркальный цвет. Давайте сделаем его красным: wuffur 18.07.11 в 16:08 Теперь, когда мы создали источник света, мы можем установить его рассеянный и бликовый цвета освещения. Давайте сделаем его красным: Mingun 20.07.11 в 15:27 |
||
|
Теперь соберите и запустите приложение. Успех! ghostintheshell 10.07.11 в 21:56 Теперь скомпилируйте и запустите приложение. О да! Mingun 20.07.11 в 15:28 |
||
|
! Мы можем теперь видеть Ниндзя, и он бросает тень. ghostintheshell 10.07.11 в 21:57 Теперь мы можем видеть Ниндзя и он отбрасывает тень. Mingun 20.07.11 в 15:28 |
+2 | |
|
Убедитесь, что также смотрели на него с фронта, полного силуэта. ghostintheshell 10.07.11 в 21:57 Убедитесь, что вы также смотрите на него спереди, и видите его полное изображение. wuffur 18.07.11 в 16:10 Убедитесь в этом, взглянув на него спереди, вы увидите сзади его силует. Mingun 15.10.11 в 12:51 |
||
|
заметьте одну вещь которая состоит в том, что Вы не "видите" источника света. ghostintheshell 10.07.11 в 21:57 Заметьте также то, что вы не "видите" источник света. Mingun 20.07.11 в 15:30 |
||
|
Вы видите свет, который это производит, но не фактический световой объект непосредственно. ghostintheshell 10.07.11 в 21:58 Вы видите свет, который производит источник, но не сам действующий объект, который испускает свет. wuffur 18.07.11 в 16:12 Вы видите свет, который он испускает, но не сам объект-источник. Mingun 20.07.11 в 15:34 |
||
|
Многие из обучающих программ Людоеда добавляют простую сущность, чтобы показать, откуда свет излучается. ghostintheshell 10.07.11 в 21:58 Многие из руководств по Ogre просто добавляют простую сущность, чтобы показать, от чего свет испускается. wuffur 18.07.11 в 16:13 Во многих уроках по Ogre добавляется простая сущность на место источника света, чтобы показать, откуда он излучается. Mingun 20.07.11 в 15:36 |
||
|
Если Вы испытываете затруднения из-за света в Вашем приложении, Вы должны рассмотреть создание чего-то подобного тому, что они делают, Вы сможете видеть точно, где Ваш свет. ghostintheshell 10.07.11 в 21:58 Если у вас трудности со светом в вашем приложении, вы рассмотреть вопрос о создании чего-то схожего тому, что они уже делали так, чтобы увидеть точно, где ваш свет находится. wuffur 18.07.11 в 16:18 Если вы испытываете трудности с освещением в вашем приложении, вам стоит рассмотреть вопрос создания чего-то подобного, чтобы точно видеть, где на самом деле находятся ваши источники света. Mingun 20.07.11 в 15:39 |
+1 | |
|
Затем, давайте испытывать направленный свет. Заметьте, как фронт ниндзя является черным как смола. ghostintheshell 10.07.11 в 22:00 Теперь давайте попробуем направленный источник света. Заметили, что спереди ниндзя стал черным, как смола? Mingun 20.07.11 в 15:45 |
||
|
Давайте добавим небольшое количество желтого направленного света, который светит на переднюю часть его тела. ghostintheshell 10.07.11 в 22:00 Давайте добавим небольшое количество желтого направленного света, который попадает на переднюю часть его тела. Mingun 20.07.11 в 15:59 |
||
|
создаем свет и выбираем цвет точно так же, как мы делаем для света точки: ghostintheshell 10.07.11 в 22:01 Мы создаем источник света и устанавливаем его цвет точно также, как мы это делали для точечного источника света: Mingun 20.07.11 в 16:00 |
||
|
Так как направленный свет, как предполагается, выходит из отдаленного расстояния, мы не должны установить его положение, только его направление. ghostintheshell 10.07.11 в 22:01 Поскольку предполагается, что направленное освещение идет из бесконечности, мы не должны устанавливать его позицию, только направление. Mingun 20.07.11 в 16:02 |
||
|
. Мы заставим направление света быть в положительном z, и отрицательном y направлении (как это выходит из 45 градусов впереди и выше ниндзя): ghostintheshell 10.07.11 в 22:01 Мы установим направление излучаемого света положительным по оси z и отрицательным по оси y (чтобы он шел под углом 45 градусов спереди и повыше ниндзя): Mingun 20.07.11 в 16:06 |
||
|
компилируйте и запустите приложение. ghostintheshell 10.07.11 в 22:02 Компилируйте и запускайте приложение. Mingun 20.07.11 в 16:06 |
