Шаг 11 - Создание камер - Viewpoint

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

Viewpoint { 
  eventIn      SFBool     set_bind
  exposedField SFFloat    fieldOfView    0.785398
  exposedField SFBool     jump           TRUE
  exposedField SFRotation orientation    0 0 1 0
  exposedField SFVec3f    position       0 0 10
  field        SFString   description    ""
  eventOut     SFTime     bindTime
  eventOut     SFBool     isBound
}

Он создает в виртуальном мире новую камеру и назначает ей заданные вами параметры.

Параметр fieldOfView задает "поле видимости" или "угол обзора". Это угол заданный в радианах, который камера способна охватить. Он может изменяться от 0 до 3.14 (Pi), т.е. о 0 градусов до 180. Задавая маленький угол видимости Вы можете достигать эффекта телескопических линз, т.е. достигать эффекта увеличения. Большие углы создают эффект широкоугольных линз, которые часто встраиваются в дверные глазки, чтобы было все видно от коврика до потолка. Значение этого угла по умолчанию равно 0.7853, т.е. 45o. Посмотрим примеры нескольких различных углов обзора для камеры, находящейся в одном положении.

Вид сценыfieldOfView = 0.7853 (45o)0.60.4
11_1.gif (955 b)11_2.gif (789 b)11_3.gif (825 b)11_4.gif (764 b)

Поле position задает точку в пространстве, в которой будет находится "центр" камеры. По умолчанию, как вы можете увидеть, камера удалена от плоскости XY на 10 метров и направлена против оси Z.

Поле orientation задает ориентацию камеры в пространстве. Как видите это поле типа SFRotation, а значит первые три цифры указывают вектор вращения, а последняя цифра угол поворота камеры относительно этого вектора по часовой стрелке в радианах. В ручную создать вектор ориентации просто только относительно главных осей, для более сложных ориентаций нужно использовать специальную матрицу преобразований. В будущем мы создадим специальный калькулятор для таких расчетов. А пока можно поворачивать камеру, к примеру, вокруг оси X.

Viewpoint {
	position 0 5 10
	orientation 1 0 0 -0.5
}

Данный пример создает камеру, положение которой изображено на рисунке выше ("вид сцены").

Поле description задает описание камеры. У каждого браузера VRML есть специальное меню, в котором перечислены камеры имеющие описание. С помощью этого меню пользователь может переключаться между ними, что может быть для него удобно при изучении виртуального мира.

Если кроме описания description камере задать имя с помощью оператора DEF, то, если в файле world.wrl существует камера с именем topview определенная как:

DEF topview Viewpoint {
	position 0 10 0
	orientation 1 0 0 -1.5
	description "Top View"
}

то при нажатии на ссылку .../world.wrl#topview браузер сделает активной камеру topview. Однако, как и всегда, есть исключения из правил - не все браузеры это могут делать.


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