Xj3D 的结构

作者: Justin Couch
最后更新: $Date: 2002/05/08 23:02:13 $
修订: $Revision: 1.1 $

原文:http://www.xj3d.org/arch/architecture.html
翻译:http://m17design.myetang.com/x3d/www.xj3d.org/arch/architecture.html

介绍

Xj3D 是一系列的代码,用来实现X3D规格的VRML/X3D浏览器。这些代码也可以用在其他方面。下面就会解释编写这些代码的目的,和这些代码的结构。

背景

1999年,Sun Microsystems' Java 3D工作组捐献了基本代码(codebase)。这些代码构成了基本VRML97浏览器和简单的察看软件。为了提供更完善的兼容性,这些基本代码还在慢慢的改进。

当X3D规格开始制定时,这些基本代码被计划用作实现规格可行性的实验。新的规格更加复杂,包括原先的UTF-8编码和XML编码。通过XML,网络浏览器使用DOM(文档对象模型 Document Object Model)来存取数据变得可行。同时,还希望能用更加完整的系统,来统一原先不同的内部脚本和外部存取界面。

动机

原始的基本代码的目的只是为了使浏览器可以显示VRML内容。除了这个目标,开发者要对代码进行改进,以使其能适应将来新的规格扩展。同时这个代码也可以帮助未知规格的开发实验,所以这个代码要有很大的适应性。

下面介绍的Xj3D结构,就是为了达到以下三个目标:

  1. 验证全部 VRML 2K+n 规格的可实现性。
  2. 构筑代码并鼓励工作组进行扩展。
  3. 按照规格的分割,把代码分割为一些较小的可重用的组件,以利于整合到其他应用程序中。
可以发现,性能并不是这个基本代码的目标。我们也努力提供更有效的执行算法,但这不是Xj3D结构的主要目的。我们并不自称会开发一个高性能的浏览器。如果需要建议你购买商业浏览器以达到性能要求。

结构概貌

结构概貌提供了对基本组件的描述:为什么要这样安排组件以及组件之间的相互关系。对每个组件更详细的描述参见组件概貌章节。

附图 1 描绘了Xj3D结构主要部分的UML组件图表 。每个组件负责一些可从应用中分割的部分。虽然可以把给定的组件分割为更小的部分,但设计还是倾向于分割成较大的部分。

 


附图 1: Xj3D结构的UML组件图表

按照功能性,我们把组件分割为一些可独立操作的部分。虽然VRML执行被认为是最接近现有VRML规格的部分,但其实并没有真正的中心组件。VRML和抽象模型中的内容通过执行组件 再现为内核场景图。然后直接使用原始渲染场景图的组件,比如使用抽象的不同渲染技术渲染。在研究设计文档时你会发现,这主要是抽象化为一些子部分的过程。同时可以在后台融入更多的标准, 比如DOM, EAI 或脚本等public fascade。

VRML执行组件也依靠其他的组件。首先,它是比如渲染器(renderer)之类低层组件之 上的抽象组件。VRML执行组件再现一个结构,同时转换它为内部的可渲染的形式,并传给渲染器。按照渲染组件的执行,这个可渲染的形式不再使用原来的场景图,甚至最终也不一定需要渲染。

围绕VRML执行组件,更多的组件并不直接使用渲染组件,也不提供渲染组件外壳。这些组件提供最终用户开发工具包和基本代码结合的通路。比如在Java3D world中,将会使用loader系统,提供独立于文件格式的抽象的文件读取处理。网络浏览器的用户可能需要通过DOM模型来使用XML文档,所以需要提供组件以处理基于DOM格式的整合应用。


组件概貌

以下章节概述了每个组件的功能。以后添加相应链接以对每个组件进行详细介绍。

Networking

VRML作为一种文件格式和运行时系统,是很依赖网络交互的。大多数文件都要涉及到外部文件,比如可能用到一些纹理(texture),脚本(script),外部原型(externproto),或inline。为了支持更高级的VRML扩展, 比如 Universal Media Library(通用媒体库),我们需要像支持URL一样来支持URNs。在JDK工具包内核中并没有提供这些支持,这里网络组件提供了所有底层界面,负责在底层提取并处理这些内容。

DOM

DOM组件提供了一个完全DOM构造的,适应JAXP界面的代码。使用标准的SAX语法解析器建造一个自定义的DOM,从而获得超过标准系统的额外的兼容性.

有两个特性是非常重要的 - 可自定义性,不需要连接到X3D规格上;DOM Level 2 事件执行。第一个特性提供了一些 JAXP 执行,但不需要保证所有执行,当制定了新的标准系统时,第二个特性可以执行新的内容。DOM事件对于X3D的发展是非常重要的,可以通过DOM通知程序X3D文档已经改变,比如其中的一些域已经改变,或已经添加删除了一些节点。

VRML Implementation

VRML执行层提供了一个渲染引擎上的抽象概念。在这个组件里,一系列的类把每种独立的节点映射为一系列可渲染的类,这时内部的渲染再现就不一定需要符合VRML节点了。

除了基本节点的功能,这个组件还提供所有基本的运行时服务,比如脚本,原型和路由。这是VRML渲染系统的核心,在此基础上,你不需要考虑它的结构,就可以安排不同的外部存取机制。这个组件在所有组件中是最大和最复杂的。

Scene Authoring Interface

SAI 场景创作界面是新提议的界面,这个API允许程序和场景图之间进行交互。这个API是为了统一原先不同的外部和内部存取界面(EAI & JSAI)

SAI组件和其它界面一样运作,和渲染内核是分离的。SAI和EAI或脚本在存取功能上并没有本质不同。

External Authoring Interface

EAI外部创作界面(External Authoring Interface)是VRML97规格的一部分,提供外部应用程序存取VRML场景图的能力。场景图中的脚本运行就是通过EAI和外部浏览器完成,EAI允许任何的应用程序和VRML内容进行交互。

Renderers

渲染API用来执行最低层的3D图形渲染,就是指示如何把VRML/X3D场景图中提供的信息转换为真实的三维数据。正如附图1显示的,有不同的渲染器,所以这部分分解为设计不同的渲染器并解释它们如何在整个Xj3D结构中运作。

Java3D Loaders

读取界面(Loader interface)是 Java3D 渲染API内核中一个常用的扩展。Sun公司在开发工具包中提供了这样一个界面,可以把不同文件格式的读取过程独立出来。VRML只是其中的一种格式(参见 J3D loader archive )。我们使用这个组件作为读取界面来执行VRML97或X3D文件的读取。

Swing

X3D不只是显示三维图形,很多的应用都打破了这个限制。在编辑器或数据可视化应用中,也需要一些二维的数据视图。这个组件,在Swing环境中提供了大量有用的工具类。

现有的代码只是停留在较低层DOM类。所有DOM树的数据最后都要通过这些组件。不需要使用X3D树。将来的组件都将添加在这里并和已有X3D规格结合。

X3D 工具

最终的组件提供了大量的工具类(classes)。一些类提供了和其他组件结合使用的功能,但也有一些是独立使用的。

参考


[ Xj3D Homepage | Xj3D @ Web3d | Screenshots | Dev docs | Dev Releases | Contributors | Getting Started ]
最后更新: $Date: 2002/05/08 23:02:13 $

原文:http://www.xj3d.org/arch/architecture.html

转载页面请保留链接 http://m17design.myetang.com/x3d/