Про одно маленькое извращение

Посетители интернетов «со стажем», наверное, помнят про язык VRML, появившийся еще в 1997 году и позволявший описывать трехмерные пространства в «читаемом» виде. Практически для каждого браузера существовали плагины, позволявшие встраивать окошко с 3D-контентом на HTML-страницы. Даже я в далеком 2002 году не остался в стороне от использования VRML на домашней страничке и нарисовал в нем какое-то подобие сортира или станции метро «Кузьминки» — почему-то мне очень понравилась текстура кафельной плитки в каком-то VRML-редакторе.

Почему-то совершенно незамеченной в то время осталась возможность VRML-плагинов взаимодействовать со страничкой, в которой они находятся. Web 1.0 тихо исчез, уступив место для динамических сайтов с JavaScript, DHTML и AJAX (все эти три слова означают примерно одно и то же, разница в гламурности). VRML вообще не отличался особыми красотами, анимация там была в зачаточном состоянии (ЕМНИП, делалась она средствами реализованного там же JavaScript, но писать всякие «эффекты» приходилось практически вручную), а о возможности изменения 3D-сцены по полученным откуда-то «снаружи» командам никто не задумывался.

Теперь — о своем опыте прикручивания модного AJAX к немодному VRML. Конечно, можно было бы выбрать в качестве 3D-среды более современный X3D — дальнейшее развитие VRML, но для него попросту нет приличных плагинов для браузера. Для VRML я использовал Cortona 3D.

В общем, задача состояла в следующем. Есть трехмерная сцена с «лампочками», которые могут гореть, например, красным, желтым и зеленым — например, представим себе модель перекрестка со светофорами и база данных, даже проще — регулярно обновляющийся XML-файл, в котором записано, каким цветом горит какая «лампочка». Надо, чтобы трехмерная сцена динамически изменялась, отслеживая изменения в XML-файле, и при этом не требовала никаких действий от пользователя.

Естественно, задача очень легко решается, если отказаться от использования всяких VRML-ных хитростей, а сделать все с использованием обычного HTML и AJAX. С другой стороны, можно управлять VRML-сценой через JavaScript в браузере. Почему-то эта возможность VRML используется настолько редко, что о ее существовании в рунете не упоминают, а в буржуйских интернетах удалось найти лишь перепевы курсовой работы по программированию в университе Нэпира, что находится в доброй старой Англии. Надо ли говорить о том, что про объединие AJAX и VRML не написано вообще ничего? Решается же вышеописанная задача буквально парой десятков строк кода.

Конечно, можно решить ту же задачу тысячей разных способов. Например, можно отображать трехмерные объекты с использованием Flash. Можно использовать не VRML и не V3D, а какой-нибудь гугловский O3D или даже COLLADA. Пожалуй, всерьез использовать это могут только разработчики браузерных говноигр. Кстати, графика в современных VRML-плагинах вполне «на уровне» и не уступает многим более серьезным играм. Ну что, как насчет Lineage прямо в браузере?

PS Кстати, Cortona3D не работает с примером Turtle Graphics. Там требуется совсем небольшая доработка, но раскрывать этот маленький секрет я пока не буду.

Про одно маленькое извращение: 2 комментария

    1. Понимаешь, тут много интересных фич.

      Во-первых, VRML — он human-readable, и довольно несложный. Можно, к примеру, написать несложный PHP или CGI скрипт, динамически генерирующий «стартовую» сцену.

      Во-вторых, объекты в VRML-сцене имеют иерархию, слегка напоминающую DOM, возможна вставка новых объектов и модификация или удаление старых — это делает Javascript на страничке с 3D-«окошком» (встроенным, к примеру, как embed или object).

      В-третьих, в самом VRML имеются довольно серьезные возможности по «автоматизации» — фактически, свой встроенный Javascript.

      В-четвертых, скорость работы графики в VRML превышает таковую у Flash (там какие-то средства по работе с 3D появились только в последней версии, а до этого применялся очень медленный софтверный рендер).

      Для чего это можно применить — решай сам, мне кажется, что варианты есть.

Добавить комментарий для ext:golergka@lj Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *