在开始创作之前,应作好下面的准备。
文本编辑器
随便你喜欢的文本编辑器,如WinXP下的记事本,Dos下的Edit等等。
x3d浏览器
3d浏览器有flux player,cortona vrml client等,更多请查看X3D Viewers, Browsers & Plug-in
硬件
x3d和硬件平台无关,只要能提供x3d浏览器。在下面的教程中,我们假定硬件平台是微机,输出设备是图形窗口,输入设备为鼠标器和键盘。当然,如果有更先进的虚拟现实设备和支持它的VRML浏览软件效果会更好。对于我们将要创作的境界,微机就足够了。
第一节 "Hello,World!"
按照惯例,我们以"Hello,World!"作为我们的第一个虚拟境界,它由立方体、圆锥和球体组成,你可能已经注意到,x3d的标志正是由这三个几何形状构成的。输入文档信息:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.1//EN" "http://www.web3d.org/specifications/x3d-3.1.dtd">
这是x3d文件的标志. 再键入
<X3D>
这是x3d正文内容的开始,注意x3d语言是区分大小写的. 我们可以省去文件头<Head></Head>直接开始场景编写:
<Sence>
然后加入一个Group节点(组节点):
<Group>
它和后面 的</Group>之内的所有内容视为一个整体,利用组节点可以把虚拟场景组织成条理清晰的树形分支结构。其中可以包括Shape节点(形态节点),它描述一个几何形状及其颜色等特征:
<Shape>
在Shape 节点内定义一个几何体Box(方盒节点):
<Box/>
注意我们没有为Box定义任何域,这意味着它的尺寸和坐标位置等特性取缺省值(单位立方体)。随后结束各节点:
</Shape>
</Group>
</Sence>
</X3D>
至此,我们已经成功地制作了第一个虚拟境界,把它保存为HelloWorld.x3d,下面是完整的文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.1//EN" "http://www.web3d.org/specifications/x3d-3.1.dtd"> <X3D> <Scene> <Group> <Shape> <Box/> </Shape> </Group> </Scene> </X3D>
利用Dreamweaver的Insert Plugin工具或者直接在网页的HTML源文件中插入一行
<embed src="HelloWorld.x3d" width="600" height="400"> </embed>
打开浏览器,你会看到一个白色的立方体,尽管不太好看,但你还是可以通过改变视点位置从不同方位观察它,初步体验“三维交互”的感觉。 下面定义立方体的外观,这只需改变在Shape节点中添加appearance(外观)节点,appearance中添加material(材质)节点,定义为漫射色红色:
<Appearance> <Material diffuseColor="1 0 0"/> </Appearance>
现在立方体变为红色,这是因为Material节点中的diffuseColor域(漫射色)取值“1 0 0”三个数字依次表示红色、绿色和蓝色,取值范围都是0到1。
现在我们生成了第二个场景,完整的代码是:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.1//EN" "http://www.web3d.org/specifications/x3d-3.1.dtd"> <X3D> <Scene> <Group> <Shape> <Appearance> <Material diffuseColor="1 0 0"/> </Appearance> <Box/> </Shape> </Group> </Scene> </X3D>
<Transform translation="5 0 0"><!--向右移5个单位长度--> <Shape> <Appearance> <Material diffuseColor="1 0 0"/> </Appearance> <Sphere/> </Shape> </Transform>
其中的<!--向右移5个单位长度-->为注释部分,用于说明代码意义,对场景的描述没在任何影响。 在x3d中,Transform节点除了可以引进平移、旋转和缩放变换以外,其作用和Group节点的作用一样。把Transform 节点的translation域(平移)设置为5 0 0,意味着Transform节点所在的坐标系相对于其上层坐标系向右平移(即x轴方向)5个单位,在其它两个方向不移动.我们第三个场景的完整代码是:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.1//EN" "http://www.web3d.org/specifications/x3d-3.1.dtd"> <X3D> <Scene> <Group> <Transform translation="5 0 0"> <Shape> <Appearance> <Material diffuseColor="1 0 0"/> </Appearance> <Sphere/> </Shape> </Transform> </Group> </Scene> </X3D>
接下来我们把方块所在的Transform节点复制三份,并把各自包含的几何形状依次定义为方块、球体和圆锥:
<Transform translation="-5 0 0"> <Shape> <Appearance> <Material diffuseColor="1 0 0"/> </Appearance> <Box/><!--方块--> </Shape> </Transform> <Transform translation="0 0 0"> <Shape> <Appearance> <Material diffuseColor="1 0 0"/> </Appearance> <Sphere/><!--球体--> </Shape> </Transform> <Transform translation="5 0 0"> <Shape> <Appearance> <Material diffuseColor="1 0 0"/> </Appearance> <Cone/><!--圆锥--> </Shape> </Transform>
你可能已经感觉到,x3d文件中的节点都是成对出现或者是以<.../>出现。注意上面的x3d文件中三个Transform节点的平移量是不同的,因而三个几何体的位置也就不同。另外,还可以修改三个几何体的颜色:球面Sphere为绿色(0 1 0),圆锥为蓝色(0 0 1 )。最后,为了以后引用方便,分别用DEF给这三个Transform 节点指定一个名称,这个x3d场景的完整代码就成为:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.1//EN" "http://www.web3d.org/specifications/x3d-3.1.dtd"> <X3D> <Scene> <Group> <Transform DEF="box" translation="-5 0 0"> <Shape> <Appearance> <Material diffuseColor="1 0 0"/> </Appearance> <Box/><!--方块--> </Shape> </Transform> <Transform DEF="sphere" translation="0 0 0"> <Shape> <Appearance> <Material diffuseColor="0 1 0"/> </Appearance> <Sphere/><!--球体--> </Shape> </Transform> <Transform DEF="cone" translation="5 0 0"> <Shape> <Appearance> <Material diffuseColor="0 0 1"/> </Appearance> <Cone/><!--圆锥--> </Shape> </Transform> </Group> </Scene> </X3D>
我的flux player 不支持中文注释,如果看不到场景中物体可去掉中文注释。把此文件保存为HelloWorld4.x3d,用x3d浏览器打开这个文件,通过调整视点从多个方位浏览自己的作品。 小结:在这一节,我们创建了第一个虚拟境界,涉及到如何用几何体构建境界,以及如何设定几何体的颜色与材质。尽管这个由方块、圆锥和球体组成的场景图比较简单,但已经反映了x3d的基本功能。当然,除了可用鼠标改变视点外,这还只是一个静态世界,在下一节,我们将引进x3d的动态特征。