Сетевой VRML
Что такое сетевой (многопользовательский) VRML - мир и чем он отличается от обычного VRML - мира?
Обычную VRML - сцену могут одновременно посещать несколько пользователей.
Они перемещаются, изменяют сцену (если, конечно, сцена интерактивная), но, при этом, каждый из них видит свою копию виртуального мира.
Пользователь не знает, что, он не одинок в этом виртуальном мире, он не видит действий других обитателей мира.
Многопользовательская VRML - сцена лишена этих недостатков.
В ней каждый посетитель представлен специальным сетевым объектом - аватаром.
Именно этот аватар и видят другие пользователи.
Действия, производимые посетителями над виртуальным миром, также синхронизируются и видны всем.
Как это делается?
Обширный список ресурсов посвящённых сетевым технологиям VRML можно найти на web3d.about.com:
Ключевым понятием многопользовательских миров является синхронизация.
Т.е. объекты в сцене должны обладать свойством сетевого взаимодействия.
К сожалению, в стандарте VRML97 таких специальных сетевых узлов не предусмотрено.
Однако, создание сетевых сцен возможно несколькими обходными путями:
- Использование нестандартных сетевых расширений.
- Реализация сетевой части проекта на Java.
- Реализация сетевой части проекта на JavaScript (ECMAScript).
Использование нестандартных расширений
Технологии blaxxun interactive и ParallelGraphics предоставляют широкие возможности для организации сложных многопользовательских сервисов.
Вот примеры таких виртуальных сообществ:
Вот примеры таких виртуальных сообществ:
За столь богатые возможности приходится платить жёстким привязыванием к одному из VRML - клиентов и обязательным наличием специализированного сервера.
Более подробно можно почитать здесь:
Более подробно можно почитать здесь:
Реализация сетевой части проекта на Java
Всё сетевое взаимодействие программируется на языке JAVA.
Связь JAVA с VRML - сценой осуществляется:
Второй вариант, похоже, более жизнеспособен. Примером успешной реализации данного подхода служит проект VNet. Клиентская и серверная часть написаны на Java. Взаимодействие с VRML - через EAI. Доступны дистрибутивы для MS Windows и Unix.
Как это работает, можно посмотреть здесь:
- через VRML - объект Script,
- либо через EAI.
Второй вариант, похоже, более жизнеспособен. Примером успешной реализации данного подхода служит проект VNet. Клиентская и серверная часть написаны на Java. Взаимодействие с VRML - через EAI. Доступны дистрибутивы для MS Windows и Unix.
Как это работает, можно посмотреть здесь:
Однако, поддержка EAI в VRML - клиентах имеет существенные различия.
Поэтому использование EAI, несмотря на кажущуюся универсальность решения, тоже может привести к выбору одного из VRML-клиентов и WEB-браузеров.
Более подробно можно почитать здесь:
Более подробно можно почитать здесь:
Реализация сетевой части проекта на JavaScript
Поддержка JavaScript (ECMAScript) в VRML - клиентах является требованием стандарта VRML97.
Это хорошая предпосылка для того, чтобы скрипт заработал во всех трёх клиентах и под любым WEB браузером
(имеется ввиду MS Internet Explorer и Netscape Communicator).
Для обмена данными с серверным скриптом используется функция createVrmlFromURL объекта Browser. В её первом параметре (URL скрипта) можно передать любые параметры от клиента к серверу. Второй и третий параметр содержит VRML - узел и имя поля этого узла, в которые сервер вернёт данные. Обычно это объект Script и имя одного из его входных полей.
Для обмена данными с серверным скриптом используется функция createVrmlFromURL объекта Browser. В её первом параметре (URL скрипта) можно передать любые параметры от клиента к серверу. Второй и третий параметр содержит VRML - узел и имя поля этого узла, в которые сервер вернёт данные. Обычно это объект Script и имя одного из его входных полей.
#VRML V2.0 utf8 DEF main_SCR Script { eventIn MFNode get_wrl_from_server field SFNode myself USE main_SCR field MFString server_url ["http://your.site.ru/your.asp"] url "javascript: function initialize(){ var param1 = 'some_param'; var param2 = 'one_more_param'; server_url[0] +='?param1='+param1+'&'+'param2='+param2; Browser.createVrmlFromURL(urla,myself,'get_wrl_from_server'); } function get_wrl_from_server(val){ trace('server response' + val.response1); } " }
Получив данные от VRML - клиента серверный скрипт может "прикопать" их и сделать доступными для других.
В MS IIS (PWS) для этих целей можно использовать встроенный объект Application.
К клиенту должен вернуться синтаксически правильный VRML - код. Поэтому серверный скрипт (в данном случае, это your.asp) передаёт параметры VRML-клиенту, как значения полей некоего пустого PROTO:
К клиенту должен вернуться синтаксически правильный VRML - код. Поэтому серверный скрипт (в данном случае, это your.asp) передаёт параметры VRML-клиенту, как значения полей некоего пустого PROTO:
Response.Expires = 0; Response.ContentType = "x-world/x-vrml"; Response.Write("#VRML V2.0 utf8"); Response.Write("\n"); Response.Write("PROTO _element_ ["); Response.Write("\n"); Response.Write(" exposedField SFString response1 \"Welcome\" "); Response.Write("\n"); Response.Write("]{Group{}}"); Response.Write("\n");
Это - наиболее простой вариант организации сетевого взаимодействия.
Однако, и возможности его не велики. Добиться хорошей синхронизации объектов достаточно проблематично.
Как это работает, можно посмотреть здесь:
Как это работает, можно посмотреть здесь:
Вобщем, как обычно, выбор путей решения, зависит от условий поставленной задачи.
Сложные многопользовательские системы, рассчитанные на большое число посетителей, видимо, имеет смысл делать на фирменных нестандартных (пока) технологиях.
В остальных случаях можно выбирать между JAVA и JavaScript. Причём, чем меньше требования к синхронизации, тем больше смысла в использовании JavaScript.
Сложные многопользовательские системы, рассчитанные на большое число посетителей, видимо, имеет смысл делать на фирменных нестандартных (пока) технологиях.
В остальных случаях можно выбирать между JAVA и JavaScript. Причём, чем меньше требования к синхронизации, тем больше смысла в использовании JavaScript.
дата обновления документа: