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

Посетители интернетов “со стажем”, наверное, помнят про язык 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. [info]golergka пишет:

    НО ЗАЧЕМ

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

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

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

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

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

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