Ogre3D Basic Tutorials / Базовые туториалы Ogre3D: Basic Tutorial 3: Terrain, Sky, and Fog
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
Скомпилируйте и запустите программу. Нравиться? wuffur 12.07.11 в 16:06 Скомпилируйте и запустите программу. Уловили? Mingun 23.10.11 в 08:28 |
|
|
(Заметим, что SkyBox зернистый, потому что используемая текстура низкого разрешения; SkyBox высокого разрешения выглядит намного лучше. ) wuffur 12.07.11 в 16:08 |
||
|
Существует несколько полезных параметров для SkyBoxes, которые мы можем установить, когда вызываем функцию setSkyBox. wuffur 12.07.11 в 16:09 Имеется несколько полезных параметров, которые можно установить SkyBox-ам при вызове setSkyBox. Mingun 26.07.11 в 14:07 |
||
|
Первый вариант заключается в том, включать или не включать SkyBox. wuffur 12.07.11 в 16:09 Первый – показывать ли SkyBox. Mingun 26.07.11 в 14:04 |
||
|
Если вам нужно выключить SkyBox просто сделайте вызов 'mSceneMgr->setSkyBox(false, "");'. wuffur 12.07.11 в 16:11 Если позже вам потребуется отключить SkyBox, просто вызовите 'mSceneMgr->setSkyBox(false, "");' Mingun 26.07.11 в 14:08 |
||
|
Второй параметр - это просто материальный скрипт, который сделан для использования в этом SkyBox. wuffur 12.07.11 в 16:12 Второй параметр – скрипт материала, используемого SkyBox-ом. Mingun 26.07.11 в 14:09 |
+3 | |
|
Третий и четвертый параметры setSkyBox довольно важны для понимания. wuffur 12.07.11 в 16:18 Третий и четвертый параметры setSkyBox весьма важные для понимания работы неба. Mingun 23.10.11 в 08:34 |
+2 | |
|
Третий параметр устанавливает расстояние на котором находится SkyBox от объекта Camera, и четвертый параметр устанавливает стоит ли SkyBox перед остальной сценой или после. wuffur 12.07.11 в 16:21 Третий параметр устанавливает расстояние, на которое будут отдалены стенки куба от камеры, а четвертый указывает, должен ли SkyBox рисоваться до отрисовки сцены или после. Mingun 26.07.11 в 14:13 |
+1 | |
|
Поэтому, давайте посмотрим на то, что случится, когда вы будете менять параметр дистанции для SkyBox от стоящих по умолчанию 5000 единиц к чему-то более близкому: wuffur 12.07.11 в 16:22 Итак, давайте посмотрим, что получится, когда вы смените расстояние до SkyBox со значения по умолчанию в 5000 единиц на что-то более близкое: Mingun 26.07.11 в 14:14 |
||
|
Ничего не изменилось! Это потому, что у четвертого параметра, который контролирует рисовать ли SkyBox первым или нет установлено по умолчанию значени true. wuffur 12.07.11 в 16:23 Ничего не изменилось! Это потому, что четвертый параметр, обеспечивающий отрисовку SkyBox до сцены, по умолчанию установлен в true. Mingun 26.07.11 в 14:17 |
||
|
Если объект SkyBox рисуется первым, и затем что угодно рендерится после него(как наш объект ландшафта Terrain) будет нарисована поверх него, таким образом получается, что SkyBox всегда появляется на фоне. wuffur 12.07.11 в 16:44 Если SkyBox рисуется первым, а затем что-то еще отрисовывается после него (вроде нашего ландшафта), оно будет нарисовано поверх куба, таким образом получается, что SkyBox всегда появляется на фоне. Mingun 26.07.11 в 14:21 |
||
|
(Отметим, что вам не нужно устанавливать дистанцию сверху ближе чем ближайшую дистанцию отсечения на камере или она будет показана!) wuffur 12.07.11 в 16:45 (Обратите внимание, что вы не должны устанавливать расстояние до SkyBox-а ближе, чем ближняя плоскость отсечения камеры, иначе вы ожидаемо не увидете SkyBox!) Mingun 26.07.11 в 14:24 |
||
|
В действительность не всегда желанно первым нарисовать SkyBox, потому, что полная вещью отрендерина. wuffur 12.07.11 в 16:46 В действительности рендерить SkyBox первым не всегда имеет смысл, из-за того что он отрисовывается целиком alexx_x 13.07.11 в 08:09 Не всегда требуется рисовать SkyBox первым, потому что он будет отрисовываться целиком. Mingun 23.10.11 в 08:39 |
||
|
Когда вы рисуете ее последней, рисуются только видимые части, что дает небольшой прирост производительности. wuffur 12.07.11 в 16:47 Когда вы рисуете его последним, рисуются только видимые части, что дает небольшой прирост производительности. Mingun 23.10.11 в 08:41 |
||
|
Поэтому давайте попробуем установить так, чтобы объект SkyBox рисовался первым: wuffur 12.07.11 в 16:48 Поэтому давайте попробуем сделать так, чтобы наш SkyBox рисовался последним: Mingun 23.10.11 в 08:42 |
||
|
И снова это выглядит как так и прежде, но теперь некоторые части этого SkyBox, которые не видимы не будут подвергаться рендерингу. wuffur 12.07.11 в 16:49 Все выглядит как и прежде, но теперь те части SkyBox-а, которые невидимы, не отрисовываются. Mingun 23.10.11 в 08:45 |
||
|
Тем не менее есть одна вещь с которой вы должны быть осторожными, когда используете этот метод. wuffur 12.07.11 в 16:50 Однако есть одна вещь, заставляющая вас осторожно использовать эту технику. Mingun 23.10.11 в 08:54 |
||
|
Если вы установите так, что SkyBox расположиться слишком близко, вам можно будет выключить часть отсечения геометрии сцены, попробуйте это: wuffur 12.07.11 в 16:53 Если вы установите SkyBox слишком близко к камере, вы можете обрезать часть геометрии сцены. К примеру, попробуйте это: Mingun 23.10.11 в 08:56 |
||
|
Как вы можете теперь увидеть, ландшафт "просовывает" сквозь SkyBox. wuffur 12.07.11 в 16:54 Как вы теперь можете видеть, ландшафт "прорезается" сквозь SkyBox. Mingun 23.10.11 в 09:00 |
||
|
Определенно не то, что мы хотели. Если вы используете экземпляры класса SkyBox в нашем приложении, вам нужно будет определить, как вы хотите их использовать. wuffur 12.07.11 в 16:56 Определенно не то, что мы хотели. Если вы используете SkyBox-ы в своем приложении, вы должны решить, как вы будите их использовать. Mingun 23.10.11 в 09:03 |
||
|
Ускорение, которое вы получаете от рендеринга объекта SkyBox после ландшафта очень скромное, и вам нужно быть осторожным не сделать бедной вашу геометрию(если это не то, к чему вы стремитесь). wuffur 12.07.11 в 16:58 Ускорение, которое вы получаете от отрисовки SkyBox-а после ландшафта, очень невелико, и вы должны быть осторожны, чтобы он не загораживал вашу геометрию (если вы не для этого его делаете). Mingun 23.10.11 в 09:08 |
||
|
Вообще говоря, оставить значения всех параметров после второго по умолчанию очень безопасный выбор. wuffur 12.07.11 в 16:59 Вообще говоря, оставить все параметры, после второго, по умолчанию – очень безопасный выбор. Mingun 23.10.11 в 09:11 |
||
|
КУПОЛ НЕБА SKYDOME wuffur 12.07.11 в 17:00 SKYDOME-Ы (НЕБОСВОДЫ) Mingun 23.10.11 в 09:15 |
||
|
Объекты типа SkyDome очень похожи на объекты типа SkyBox, и вы можете использовать их вызвав setSkyDome. wuffur 12.07.11 в 17:28 SkyDome-ы очень похожи на SkyBoxe-ы, и вы можете использовать их, вызвав <b>setSkyDome</b>. Mingun 23.10.11 в 09:15 |
||
|
Гигантские куб создается вокруг камеры на котором рендерится, но огромная разница в том, что текстуры "проектируются" на SkyBox в сферической форме. wuffur 12.07.11 в 17:30 Точно так же создается и отрисовывается гигантский куб вокруг камеры, но огромное различие в том, что текстура "проектируется" на SkyBox сферическим способом. Mingun 23.10.11 в 09:21 |
||
|
И вы все еще смотрите на куб, но он выглядит как будто текстура обернута вокруг поверхности сферы. wuffur 12.07.11 в 17:31 И хотя вы глядите на куб, выглядит он так, как будто текстура обернута вокруг поверхности сферы. Mingun 23.10.11 в 09:19 |
||
|
Главный недостаток этого метода состоит в том, что нижняя часть куба будет нетекстурированной, поэтому вам всегда нужно иметь некоторый ландшафт(земная поверхность), который бы скрывал основание. wuffur 12.07.11 в 17:33 |
||
|
Пример текстуры, который предоставляет Ogre для объектов типа SkyDome позволит вам ясно это увидеть. wuffur 12.07.11 в 17:34 Пример текстуры, которую Ogre предоставляет для SkyDome-ов, позволит вам ясно это увидеть. Mingun 23.10.11 в 09:25 |
||
|
Отчистите вызов функции setSkyBox из createScene и добавьте этот код вместо него: wuffur 12.07.11 в 17:34 Уберите вызов setSkyBox из createScene и добавьте вместо него следующий код: Mingun 23.10.11 в 09:26 |
||
|
Когда вы это запустите, подвиньте камеру к мертвому центру ландшафта и подвиньте камеры, так что она будет расположена достаточно близко к поверности земли (так выглядит лучше всего). wuffur 12.07.11 в 17:36 Когда вы запустите пример, переместите камеру в мертвую точку (?) ландшафта как можно ближе к поверхности (так выглядит лучше). Mingun 23.10.11 в 09:35 |
||
|
После того, как посмотрите на него, нажмите кнопку R чтобы переключиться на обзор полигональной сетки. wuffur 12.07.11 в 17:37 После занятия позиции нажмите клавишу R, чтобы переключится в представление сетки. Mingun 23.10.11 в 09:37 |
+3 | |
|
Как вы можете увидеть, мы все еще смотрим на куб(без основания), но он выглядит как будто бы небеса обернуты вокруг сферы на вершине. wuffur 12.07.11 в 17:38 Как видите, мы все же смотрим на куб (без основания), но выглядит он так, как если бы облака были обернуты вокруг верхней половины сферы. Mingun 23.10.11 в 09:38 |
||
|
(Также отметим, что перемещение облаков - это свойство материала "Examples/CloudySky", вообще-то не объектов типа SkyDomes) wuffur 12.07.11 в 17:39 (Также отметим, что перемещение облаков – свойство материала "Examples/CloudySky", а вовсе не SkyDome-а.) Mingun 23.10.11 в 09:40 |
+3 | |
|
Первые два параметра setSkyDome те же, что и у setSkyBox, у вы можете выключить SkyDome вызвав 'mSceneMgr->setSkyDome(false, "");'. wuffur 12.07.11 в 17:41 |
||
|
Третий параметр - это значение кривизны используемое для SkyDome. wuffur 12.07.11 в 17:41 |
||
|
Ссылка API предлагает использовать значения между 2 и 65; нижние для лучшего эффекта расстояния, и высоких значений для меньшего искажения и сгдаживающего эффекта. ghostintheshell 12.07.11 в 19:39 Руководство по API <b>предлагает</b> использовать значения между 2 и 65; меньшие значения для лучшего эффекта расстояния, большие – для меньших искажений и лучшего сглаживания. Mingun 23.10.11 в 09:45 |
||
|
Попытайтесь установить третий параметр в 2 и 65 и посмотрите на различие. ghostintheshell 12.07.11 в 19:41 Попытайтесь установить третий параметр в 2 и в 65 и посмотрите на различие. Mingun 23.10.11 в 09:47 |
||
|
Эффект расстояния, к которому обращалась ссылка API, может быть ясно замечен в этих скриншотах. ghostintheshell 12.07.11 в 19:42 Эффект расстояния, на который ссылалось руководство по API, ясно виден на этих скриншотах. Mingun 23.10.11 в 09:49 |
||
|
Это устанавливает искривление в 2: ghostintheshell 12.07.11 в 19:42 Здесь кривизна равна 2: Mingun 23.10.11 в 09:49 |
+1 | |
|
Это устанавливает искривление в 64: ghostintheshell 12.07.11 в 19:42 Здесь кривизна равна 64: Mingun 23.10.11 в 09:49 |
||
|
Четвертый параметр говорит о том, сколько раз ваша текстура подверглась тайлингу, которую нужно подстроить в зависимости от размера вашей текстуры. wuffur 12.07.11 в 19:50 Четвертый параметр – количество повторов текстуры, которое вы должны будите настроить в зависимости от размера вашей текстуры. Mingun 23.10.11 в 11:49 |
||
|
Убедитесь, что отметили, что этот параметр - Реальное значение (плавающая запятая) и не целое число. ghostintheshell 12.07.11 в 19:49 Обязательно укажите, что этот параметр имеет действительное значение (с плавающей точкой) и не целочисленный. wuffur 12.07.11 в 19:52 Обратите внимание, что этот параметр не целочисленный, а значение типа Real (c плавающей точкой). На <b>задолба!ли</b> и так много историй. Mingun 23.10.11 в 11:52 |
+1 | |
|
Вы можете подвергнуть их тайлингу 1.234 раза, если это то, что выглядит хорошо для вашего приложения. wuffur 12.07.11 в 20:00 Вы можете повторить ее 1.234 раз, если так она выглядит хорошо в вашем приложении. Mingun 23.10.11 в 11:56 |
||
|
Пятые и шестые параметры - расстояние и drawFirst, соответственно, который мы уже охватили в секции SkyBox. ghostintheshell 12.07.11 в 19:55 Пытый и шестой параметры - это расстояние и drawFirst(какой объект рисовать первым) соответственно, которые мы уже описали в секции SkyBox. wuffur 12.07.11 в 19:59 Пятый и шестой параметры – расстояние и флаг рисования небосвода первым, соответственно; их мы уже описали в разделе, посвященном SkyBox-у. Mingun 23.10.11 в 11:58 |
+1 | |
|
SKYPLANES (плоскости неба) ghostintheshell 12.07.11 в 19:56 SKYPLANE-Ы (НЕБЕСНЫЕ ПЛОСКОСТИ) Mingun 23.10.11 в 11:59 |
||
|
SkyPlanes очень отличаются от SkyBoxes и SkyDomes ghostintheshell 12.07.11 в 19:57 SkyPlane-ы очень отличаются от SkyBoxe-ов и SkyDome-ов. Mingun 23.10.11 в 12:00 |
||
|
Вместо куба на котором рендеряться текстуры неба, мы просто используем одну плоскость. wuffur 12.07.11 в 19:58 Вместо куба, чтобы делать рендеринг текстуры неба, мы используем только единственную плоскость. ghostintheshell 12.07.11 в 19:59 Вместо куба, для отрисовки на нем текстуры неба, мы используем просто одну плоскость. Mingun 23.10.11 в 12:01 |
||
|
(Отметьте всеми следующими конфигурациями SkyPlane, Вы должны быть где-нибудь к середине территории и рядом с землей.) ghostintheshell 12.07.11 в 20:00 (отметьте, для всех следующих конфигураций SkyPlane вам нужно быть повернутым куда-то по направлению к середине ландшафта близко к земле.) wuffur 12.07.11 в 20:02 (Обратите внимание, что для всех последующих конфигураций SkyPlane вы должны быть где-то в глубине ландшафта и поближе к земле.) Mingun 23.10.11 в 12:07 |
||
|
Уберите весь код SkyDome из createScene. Первой вещь, которую вам нужно сделать с этой плоскостью это создать ее, и поместить ее лицом вниз. wuffur 12.07.11 в 20:04 Уберите весь код SkyDome из createScene. Первая вещь, которую мы собираемся сделать, создать плоскость, и повернуть её вниз. ghostintheshell 12.07.11 в 20:04 Уберите весь код SkyDome из createScene. Первая вещь, которую мы собираемся сделать – создать плоскость и повернуть ее лицом вниз. Mingun 23.10.11 в 14:29 |
||
|
У setSkyPlane метода, который мы будем вызывать, нет параметра расстояния как у SkyBox и SkyDome. ghostintheshell 12.07.11 в 20:05 У метода setSkyPlane , который мы будем вызывать, нет параметра distance как у SkyBox и SkyDome. wuffur 12.07.11 в 20:10 У метода setSkyPlane, который мы будем использовать, нет параметра расстояния, как у setSkyBox и setSkyDome. Mingun 23.10.11 в 14:32 |
+1 |
