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

Посетители интернетов «со стажем», наверное, помнят про язык 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. Там требуется совсем небольшая доработка, но раскрывать этот маленький секрет я пока не буду.