Во время открытия документа браузер пытается разместить всю сцену в окне браузера и порой выбирает не очень выгодный вид. Чтобы начать просмотр с другой позиции или определить набор позиций существует узел 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.6 | 0.4 |
---|---|---|---|---|
![]() | ![]() | ![]() | ![]() |
Поле 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. Однако, как и всегда, есть исключения из правил - не все браузеры это могут делать.