VRML简介与形体生成

时间:2022-03-02 14:54:40

VRML简介与形体生成

作者/来源:未知 一. 什么是VRML语言

1. VRML的发展历史
2. 其它相关技术
OPENGL (Open Graphic Library, 最重要的三维函数库)
Direct3D (DirectX包的一个组成部分,用于三维游戏编程的三维函数库)
JAVA 3D
SVG (Scalable Vector Graphics )
FLASH(三维的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数组

颜色按顺序分配给各个折线段