JavaScript для мага

Динамическое создание VRML-сцен


Чтобы продемонстрировать гибкость языка JavaScript, давайте теперь попытаемся динамически создать сцену на языке VRML. Напомним, что аббревиатура VRML расшифровывается как язык моделирования виртуальной деальности. То есть это язык для создания трехмерных сцен. Можно, например, взять очки виртуальной реальности и наслаждиться прогулкой по таким сценам ... Возьмем самый простой пример - голубой куб. Тем не менее, чтобы рассмотреть его, понадобится программная приставка VRML к Вашему браузеру (plug-in). Предлагаемый Вашему вниманию скрипт не проверяет, а доступен ли браузеру plug-in VRML (впрочем сделать это - вовсе не проблема).

 

(online-версия руководства позволит Вам проверить этот скрипт немедленно)

Исходный код скрипта:

<html>

<head>

<script language="JavaScript">

<!-- hide

function vrmlScene() {

  vrml= open("", "displayWindow",

    "width=500,height=400,status=yes,toolbar=yes,menubar=yes");

  // открыть document для последующего вывода информации

  vrml.document.open("x-world/x-vrml");



  

  vr= vrml.document;

  // создать сцену VRML

  vr.writeln("#VRML V1.0 ascii");

  // Освещение

  vr.write("Separator { DirectionalLight { ");

  vr.write("direction 3 -1 -2.5 } ");

  // Камера

  vr.write("PerspectiveCamera { position -8.6 2.1 5.6 ");

  vr.write("orientation -0.1352 -0.9831 -0.1233 1.1417 ");

  vr.write("focalDistance 10.84 } ");

  // Куб

  vr.write("Separator { Material { diffuseColor 0 0 1 } ");

  vr.write("Transform { translation -2.4 .2 1 rotation 0 0.5 1 .9 } ");

  vr.write("Cube {} } }");

  // Закрыть document - (но не окно!)

  vrml.document.close(); 

}

// -->

</script>

</head>

<body>

<form>

<input type=button value="VRML on-the-fly" onClick="vrmlScene()">


</form>

</body>

</html>

Как видно, текст скрипта совершенно такой же, как и в предыдущем примере. Сперва открывается новое окно. Затем мы открываем document для вывода него информации. Рассмотрим поподробнее соответствующую команду:

  // открыть document для последующего вывода информации

  vrml.document.open("x-world/x-vrml");

В предыдущих примерах мы не указывали в скобках ничего. Что же тогда означает новая запись "x-world/x-vrml"? На самом же деле, с помощью этой инструкции мы задаем тип MIME для документа, который хотим создать. То есть, тем самым мы сообщаем браузеру, какого типа данные будут ему сейчас переданы. Если же мы в этом месте не определили в скобках конкретный тип MIME, то по умолчанию для нового документа будет выбран тип "text/html" (а это как раз и есть тип MIME для файлов HTML).

 (Есть несколько способов выяснить, что же означает тот или иной тип MIME - в самом же браузере содержится список распознаваемых MIME. Вы можете извлечь этот список из пунктов меню option или preference.)

Для создания трехмерной сцены мы должны составить инструкцию vrml.document.write(). Но поскольку это кажется слишком длинным, то мы просто определяем переменную vr = vrml.document. И затем вместо vrml.document.write() мы пишем просто vr.write ().

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

#VRML V1.0 ascii

Separator {

  DirectionalLight { direction 3 -1 -2.5 }

  PerspectiveCamera {

    position -8.6 2.1 5.6

    orientation -0.1352 -0.9831 -0.1233 1.1417

    focalDistance 10.84

  }

  Separator {

    Material {

      diffuseColor 0 0 1

    }

    Transform {

      translation -2.4 .2 1

      rotation 0 0.5 1 .9



    }

    Cube {}

  }

}

А это как раз и есть тот код, который мы выводим на экран с помощью команды document.write().

Впрочем, совершенно бессмысленно динамически создать сцену, которую с тем же успехом  можно загрузить и как обычный VRML-файл.

Интереснее будет, если Вы, например, сделаете форму, где пользователь будет иметь выбор из различных объектов - например, между сферой, цилиндрому, конусом и т.д. - а JavaScript на основе этих данных всего лишь сгенерирует соответствующую трехмерную сцену (например, так я поступаю в своей книге о JS).

©1996,1997 by Stefan Koch

e-mail:skoch@rumms.uni-mannheim.de

http://rummelplatz.uni-mannheim.de/~skoch/

Моя книга по JavaScript: http://www.dpunkt.de/javascript

Введение в JavaScript для Мага

© 1996, 1997 Стефан Кох (Stefan Koch)


Содержание раздела