一. 什么是语言
1. VRML的发展历史
2. 其它相关
OPENGL (Open Graphic Library, 最重要的三维函数库)
Direct3D (DirectX包的一个组成部分,用于三维游戏编程的三维函数库)
JAVA 3D
SVG (Scalable Vector Graphics )
(三维的FLASH即将出现)
二. 如何在计算机上运行VRML 1. 首先要网络浏览器上安装VRML插件(任意一个均可) Cosmoplayer 2.1.1
Cortona 2.2
Blaxxun Contact 4.4
2. 编写VRML程序 利用文本编缉器(记事本、写字板)
利用vrmlPad(一个专门用于编写VRML程序的工具) 3. VRML 2.0文件的扩展名必需为wrl或wrz 例如: car.wrl (普通)
bus.wrz(格式,可用Winzip等打开) 4. VRML 2.0文件的第一行必须为: #VRML V2.0 utf8
5. 运行VRML文件的方式:
A. 在浏览器中调用VRML文件
B. 在管理器中点击VRML文件
三. VRML2.0 的基本语法知识 1. VRML的基本语句为节点语句,VRML有54个节点
2. 每一个节点语句均以节点名开头,后面带有一个花扩弧串,里面给出值参数称为字段(field)
3. 填写字段时,首先给出字段名,再给出字段的具体内容,字段的具体内容有些是具体数值,如高度、半径、颜色、长宽高,有些则是另一个节点语句,因而节点语句可以多层镶套,即有多层花扩弧。
4. 字段名均以小写开头,节点名均以大写开头有时字段名和节点名基本相同,如appearance和Appearance
四. 基本的生成
1. VRML的坐标系 (见P7,+X朝右,+Y朝上,+z朝外)
尺寸单位 米
缺省观测位置 (0, 0, 10 )
2. Shape节点
所有形体及文字均用到Shape节点,它有两个参数:
由appearance给出形体的外观
由geometry给出形体的几何特征
3. Box节点
例:Shape{ geometry Box { } }
此为无外观效果的形体,尺寸为缺省值
形体颜色为黑色,被光线照射后为白色
4. Cylinder节点
例:Shape{ appearance Appearance{material Material{diffuseColor 1 0 0}}
geometry Cylinder{ height 4}
}
生成的为一个红色的圆锥,底半径为1(缺省值),高为4
5. Sphere节点
6. Cone节点
7. Appearance节点
material的内容用P82的Material节点定义
texture可用三种纹理节点定义
textureTransform用TextureTransform节点定义
三. 复杂形体的生成 1. Coordinate节点 用于定义空间的坐标点数组 2. Extrusion节点 用于生成一个拉伸体 常用的字段有:
crossSection 通过一组头尾相连的点,给出一个断面形状
spine 给出一个拉伸线
scale 对形体进行变形
3. ElevationGrid节点 定义一个网状面
常用的字段有:
xDimension X方向上点的个数
zDimension Z方向上点的个数
xSpacing X方向上网格的尺寸
zSpacing Z方向上网格的尺寸
height 各网格点的高度
4. PointSet节点 定义一组空间点
字段有:
coord 用Coordinate节点定义点的坐标
color 用Color节点定义点的颜色 (也可以不给出color而直接用Shape的appearance定义)
5. IndexedLineSet节点 定义折线段
常用的字段有:
color 定义颜色
coord 定义端点的坐标
colorIndex 给出挑选颜色的方式
coordIndex 给出挑选端点的方式
colorPerVertex 用于指定颜色是按端点给还是按线段给
coord提供了需要的点数组(N个点,则各个点的下标从0到N-1)
coordIndex则给出了点的使用方式
以下标的形式任意挑选所用的点,构造一个或多个折线段 每个折线段之间用-1分开
线颜色的五种处理方式:
1. 不给出color字段,直接用Shape节点的appearance来定义(用emissiveColor),例如EX3-11的
Shape{
appearance Appearance{material Material{emissiveColor 1 1 0}}
geometry IndexedLineSet{
coord Coordinate{point[-2 -2 0,2 -2 0,2 2 0,-2 2 0]}
coordIndex[0 1 2 3 0]
}
}
2. 可使颜色在线段上发生渐变
colorPerVertex为TRUE (缺省)
给出一个color数组,颜色的个数和点的个数相同,每个点均有特定的颜色
颜色按colorIndex提供的方式挑选
例如EX3-11的:
Shape {
geometry IndexedLineSet {
coord Coordinate {point [ 1 1 1,2 3 2,1 4 3,4 2 1,-1 -2 2,3 3 4,5 2 3]}
coordIndex [0 1 -1 1 2 -1 2 3 -1 3 4 -1 4 5 -1 5 6]
color Color { color [ 1 1 1,0 0 1,0 1 1,1 0 0,1 0 0,1 0 1,1 1 0] }
colorIndex[6 3 -1 6 6 -1 3 3 -1 3 3 -1 5 5 -1 5 5]
}
}
3. 可使颜色在线段上发生渐变
colorPerVertex为TRUE (缺省)
给出一个color数组,颜色的个数和点的个数相同,每个点均有特定的颜色
颜色的挑选按coordIndex的下标挑选(coordIndex代替colorIndex)
例如EX3-10的:
Shape {
geometry IndexedLineSet {
coord Coordinate {point [ 1 1 1,2 3 2,1 4 3,4 2 1,-1 -2 2,3 3 4,5 2 3]}
coordIndex [ 0 1 -1 1 2 -1 2 3 -1 3 4 -1 4 5 -1 5 6]
color Color { color [ 1 0 0,0 0 1,0 1 0,1 1 0,0 1 1,1 0 1,1 1 1] }
}
}
4. 每一个折线段拥有一种颜色,颜色从颜色数组中挑选,这时:
colorPerVertex为FALSE
给出一个color数组
颜色通过colorIndex挑选并赋予相应的折线段
例如,EX3-10的:
Shape {
geometry IndexedLineSet {
coord Coordinate {point[-5 1 1,-4 3 2,-5 4 3,-1 2 1,-7 2 3 ]}
coordIndex [0 1 2 3 4 ]
color Color {color [0 1 1]}
colorIndex [0]
colorPerVertex FALSE
}
}
5. 每一个折线段拥有一种颜色,但不提供colorIndex字段,这时:
colorPerVertex为FALSE
给出一个color数组
颜色按顺序分配给各个折线段
例如,EX3-11的:
Shape {
geometry IndexedLineSet {
coord Coordinate {point[-5 1 1,-4 3 2,-5 4 3,-1 2 1,-7 2 3 ]}
coordIndex [0 1 2 -1 2 3 4 ]
color Color {color [0 1 1,1 1 1]}
colorPerVertex FALSE
}
}
6. IndexedFaceSet节点 用来生成自定义面 常用的字段有:
color 定义颜色
coord 定义端点的坐标
colorIndex 给出挑选颜色的方式
coordIndex 给出挑选端点的方式
colorPerVertex 用于指定颜色是按端点给还是按线段给
coord提供了需要的顶点数组(N个点,则各个点的下标从0到N-1)
coordIndex则给出了顶点的使用方式
以下标的形式任意挑选所用的点,构造面
每个面之间用-1分开
面颜色的五种处理方式:
1. 不给出color字段,直接用Shape节点的appearance来定义
(用emissiveColor)
2. 可使颜色在面上发生渐变
colorPerVertex为TRUE (缺省)
给出一个color数组
颜色按colorIndex提供的方式挑选
3. 可使颜色在面上发生渐变
colorPerVertex为TRUE (缺省)
给出一个color数组,颜色的个数和点的个数相同,每个点均有特定的颜色
颜色的挑选按coordIndex的下标挑选(coordIndex代替colorIndex)
4. 每一个面拥有一种颜色,颜色从颜色数组中挑选
colorPerVertex为FALSE
给出一个color数组
颜色通过colorIndex挑选并赋予相应的折线段
5. 每一个折线段拥有一种颜色,但不提供colorIndex字段,这时:
colorPerVertex为FALSE
给出一个color数组
颜色按顺序分配给各个折线段