Graphics 版 (精华区)

发信人: moonvalley (月光), 信区: Graphics
标  题: vrml同学路三----开始搭积木
发信站: 紫 丁 香 (Sun Dec 19 08:53:44 1999), 转信

vrml同学路三----开始搭积木 
作者:阿健 

  继续上次的,这次开始讲述最要紧的一个节点:transform

  另外,可能是因为文章发表在cpcw,网站明显比以前有名^-^,经常有网友问我
为什么将我的站点添加到收藏夹后会出现象:-))的一个特别的图标 ,首先要恭喜这些网友
,你们都使用了ie5,这个东西其实十分容易实现,只要在站点里面放一个favicon.ico的图
标就ok了(有些东西说穿了就这么简单.)
  还有网友问我写vrml用什么软件,这里统一回答大家,比较容易使用的有:
canoma(我站点的我的小宝库内),如前文所写不论用3ds,acad,做的模型都可以
用3dmax2.5以上转换(不推荐).还有一个选择:用我写的vrml编写器(同样在我的站点,适合
写动画,加工等,由于时间不够---或者说有点懒?,原来早就说的script至今没有做,欢迎
大家来鞭策我.) 


  在讲述transform以前,先继续讲一些vrml的约定.
在vrml中关于物体的尺寸都是用1,2,1000等的数字来表示的,这些数字你可以理解为任意
的度量衡,可以是1尺,1米,也可以算一毫米.只要你记得在自己的场景中统一就可以了.最
好在vrml文件中注解一下省得以后自己忘了,-----VRML的注解是用#开头的.

  VRML中角度的描述是用0~3.1415926*** 来描述的.(当然用的时候根本没有必要这么
精确) 

  VRML中的色彩约定也采用R G B的方式,不过各个色彩的取值不是0~255而是0~1.(我的
软件已经实现了这个转换,角度的转换暂时还没有做.)

  另外不知道大家尝试过上次的vrml基本节点了没有,是否将xyz搞清楚,这里再次将
vrml的方向概念明确一下,图中箭头的方向就是指向正方向(负值为原点相反的方向.)
这个就是所说的右手法则(中指指向自己,代表z,食指指天代表y,拇指代表x方向.一般的
3d软件大多也是这样的.) 

这些都是一些基本的约定.有了这些知识,还要再讲几个节点,然后才可以讲transform节点
(本来想跳过的,一想不对,毕竟还有不少朋友从来没有碰到过vrml.而且这次介绍的是一个
比较大的模型:东方明珠电视塔.如果按照本来的打算介绍心跳......但即使是那个小东西
,这几个节点也还是逃不掉^-^)

先讲GROUP{childeren[]}节点,这个节点只有children一个子节点,正如它的名字,唯一的
作用就是将几个模型组成一个组.childen[]-----可以包含其他的子节点,正如名字:儿子
(子节点)

DEF ***:定义一个节点(几乎所有的节点都可以定义,包括模型,颜色,以及上述的组节点
等等.) USE ***:使用上述定义的节点 -----优点:1,不用重新写一遍了,效率高很多,代
码小许多,2,只要改变一次原来定义的内容,所有引用的地方都会改变!(有点css的感觉?).

先介绍一下transform节点 transform节点的作用就是3d模型的定位和形状变换(旋转,拉
伸等等)

Transform{ 
children[ ] #要定位,变换的模型就放在这里
translation 0.0 0.0 0.0 #模型定位,将模型的中心点定位在x,y,z的坐标
scale 1.0 1.0 1.0 #模型,形状变换,例如将园变化为椭圆等等同样是x,y,z三个方向伸展
scaleOrientation 0.0 0.0 1.0 0.0 #模型变换的方向(可以使模型不那么"规则")具体类
似rotation
center 0.0 0.0 0.0 #改变rotation(旋转)的中心点
rotation 0.0 0.0 1.0 0.0 #使模型旋转前面是所围绕旋转的轴,最后一个是旋转的角度.
旋转同样采用右手法则,大拇指是围绕旋转的轴的正方向,四个手指是旋转的正方向.(别急
,下面有例子)



   一下子说那么多,有点不大明白,接受不了?没有关系->开始看下面的例子吧,看完
例子,相信你就会明白了.这次做的是东方明珠,东方明珠的底座3个支点是等边三角形,所
以先在(z,x平面上将坐标定下来.)

#VRML V2.0 utf8 Transform{ children[
DEF sp1 Group{ 
#注意上面这一句,定义了一个名称为sp1的组节点(节点由两个模型组合而成) 
children[
Shape{
appearance NULL 
geometry Cylinder{
radius 1.0 height 8.0 side TRUE top TRUE bottom TRUE } 
}
Shape{appearance NULL geometry Sphere{radius 1.5} }
]
}
translation 3.4 0 -2
# 从这行开始是transform的内容,上面定义了第一根柱子的中心位置,和下面的一样,都
只定义(x,z)上面的坐标,y都没有定义.
scale 1.0 1.0 1.0
scaleOrientation 0.0 0.0 1.0 0.0 
center 0.0 0.0 0.0
rotation 1.0 0.0 0.0 1.2
#为了做演示,这里简单的将一个柱子横了过来另外两根都只是只是定义了位置,其他均不
做变化.

# no 2 (左边的柱子)
Transform{
children[USE sp1 ] #直接使用上面定义的组节点sp1
translation -3.4 0 -2 
scale 1.5 1.0 1.0 #将物体延x方向变形(伸展)
scaleOrientation 0.0 0.0 1.0 0.3 #伸展的旋转角度(边伸展,边旋转)
center 0.0 0.0 0.0 
rotation 0.0 0.0 1.0 0.0 


# no 3 (最前面的柱子,没有做任何的变换)
Transform{ children[USE sp1 ] translation 0 0 4 scale 1.0 1.0 1.0 
scaleOrientation 0.0 0.0 1.0 0.0 center 0.0 0.0 0.0 rotation 0.0 0.0 1.0 0.0 }
#再告诉大家一点关于vrml的分隔符,vrml认为回车,逗号,空格都是可以的,所以向上面这
样连接在一起也没问题,用那么多分行只是为了便于阅读.另外,请仔细掌握所有TANSFORM
的命令,和方向等概念,今后做动画也都和这些命令,和TANSFORM节点有关了-----所以
TANSFORM可以认为是VRML最要紧的命令之一. 

下面是上边这段代码所形成的vrml. 

下面是完工的东方明珠的模型(其他部分我相信不写,大家也都明白,源文件我付在文章最
后了.这次完成的模型因为没有定义颜色也没有贴图,所以不大好看,下次就开始就开始讲
解apperance--外观的节点.这次里面都是用NULL---空值,使用默认值来替代掉的.而且没
有详细的比例数据,所以仅仅做到形似而已,大家不要着急,天空,大地等等的东西,色彩我
会慢慢添加的,讲解的.)
 
文件大小2.4k 为了节约空间,这里没有使用转行(你自己分隔一下看看,相信有好处的.)

  看起来好像有点麻烦,其实只要你将概念搞清楚了,用编写器写并不是十分麻烦(只是
3d定位,数学方面比较烦一点.)总的来说搞vrml确实比javascript,flash,甚至asp等等麻
烦一些,只是作为网虫.网络大蜘蛛(织网人^-^)学完那些东西还想发展的话,来一起研究
vrml吧!
  终于将文章写完了,满头大汉......我也只是vrml的爱好,学习,研究者,如果
文章中有任何不当之处还请您来指正.我的竹叶在 http://humor.lawton.com.cn 新申请
了一个"中国 vrml 联盟" 的论坛----免费域名:vrml4u.soim.net 欢迎多多来捧场. 

                  [下载全部相关文件] 
 
 --   
不飞到最高我会后悔                 

※ 来源:.紫 丁 香 bbs.hit.edu.cn.[FROM: lichengyu.hit.ed]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.637毫秒