Шаг 8 - Параметры виртуального мира

Параметры виртуального мира можно задать с помощью двух узлов WorldInfo и Background. Эти узлы не являются обязательными, но если Вы хотите придать некоторую оригинальность своему миру, то используйте их.

Узел WorldInfo имеет следующее описание:

WorldInfo { 
  field MFString info  []
  field SFString title ""
}

Он задает информацию о мире, причем не имеет своего графического воплощения. Информация, которую он содержит, может использовать браузер. Поле title, как правило, содержит название мира, которое браузер может использовать в титульной строке окна. В поле info авторы часто помещают какое-то краткое описание мира или свой копирайт. Пример:

WorldInfo { 
  info  ["HEHEHE !!! FIRST STEPS - Forever !!!"]
  title "VRML WorldInfo node example"
}

В отличии от WorldInfo, узел Background более полезен. Описание его такое:

Background { 
  eventIn      SFBool   set_bind
  exposedField MFFloat  groundAngle  []
  exposedField MFColor  groundColor  []
  exposedField MFString backUrl      []
  exposedField MFString bottomUrl    []
  exposedField MFString frontUrl     []
  exposedField MFString leftUrl      []
  exposedField MFString rightUrl     []
  exposedField MFString topUrl       []
  exposedField MFFloat  skyAngle     []
  exposedField MFColor  skyColor     0 0 0
  eventOut     SFBool   isBound
}

Как видите оно даже громадное :)) Поэтому обо всем по порядку. С помощью данного узла можно устанавливать два типа фона: из цветов и изображений.

Все фоновое пространство виртуального мира поделено на сферу неба (sky) и полусферу земли (ground). Цвета, в которые будет окрашиваться небо задаются с помошью параметров skyColor и skyAngle. Если Вы заметили, то эти параметры являются массивами. Для чего это надо ? Для того, чтобы окрашивать небосвод в более чем один цвет, к примеру во время заката небо окрашено разными цветами. Действует эта схема следующим образом: сначала вы разбиваете сферу на участки с помощью массива углов skyAngle, которые задаются в радианах. Первой точкой разбиения является верхняя точка небесной сферы равная 0 радиан, ее не надо указывать потому, что она является "точкой отсчета" углов. Далее может идти неограниченное количество углов в порядке возрастания. Последним углом будет нижняя точка сферы, равная числу Pi=3.1415, т.е. 180 градусам. Эта точка является максимальным значением угла и также не указывается. Таким образом, чтобы разбить, к примеру, небесную сферу на две разноцветных половинки надо в массив углов занести значение угла делящего отрезок [0 .. Pi] пополам.

Значения цветов, в которые окрашиваются участки сферы указываются в массиве цветов skyColor. При этом количество цветов всегда на 1 больше, чем значений в массиве углов. Ну, это я думаю должно быть понятно... Давайте рассмотрим пример:

#VRML V2.0 utf8

Background {
#	          синий   красный  зеленый  желтый
	skyColor [0 0 1,    1 0 0,   0 1 0, 1 1 0]
	skyAngle [0.9, 1.65, 2.2]
}

В результате этого небо будет окрашиваться примерно по такой схеме:

8_1.gif (4726 b)

Заметьте, что между соседними цветами браузер делает плавный переход между цветами - градиент, чтобы не было четких границ. Если вы будете использовать только одно значение цвета:

#VRML V2.0 utf8

Background {
#	     синий
	skyColor 0 0 1
}

То небесная сфера будет окрашена в один цвет.

Кроме небесной сферы есть еще полусфера земли. За ее окраску отвечают параметры groundColor и groundAngle. Углы лежат в диапазоне от 0 до 90 градусов, т.е. [0 .. Pi/2]:

#VRML V2.0 utf8

Background {
	groundColor [ 1 1 0,1 0.5 0, 0 1 0]
	groundAngle [0.6, 1.2]
}

Вот как будет закрашиваться земля:

8_2.gif (2840 b)

Кроме обычной окраски фона, Вы можете задавать фоновые изображения, создавая таким образом фоновую панораму мира. Физически это представляет собой куб с "бесконечно большими" гранями, на которые наложены текстуры указанные в параметрах topUrl, frontUrl, leftUrl, rightUrl, backUrl, bottomUrl :

8_3.gif (1618 b)

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

8_4.gif (2840 b)

Внутри этого куба как раз и "бродит" пользователь :) Таким вот образом вы можете создать небеса, горы, моря и все что душе угодно.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Кузин Андрей.