尝试中.....
作业要求:
制作旋转门,当鼠标在玻璃门上拖拽时玻璃门旋转。
制作过程如下:
1、先建立1个横向的立方体,充当玻璃门1
代码:
Transform {
translation 0 0.6 0 #立方体向上移动到0.6位置
children [
Shape {
appearance Appearance { #外观域
material Material {
diffuseColor 0 0.2 0.5 #材质颜色设置
transparency 0.6 #透明度设置
}}
geometry Box { #立方体几个造型节点
size 2 1 0.1 #立方体的大小,三维坐标代表长宽高
}
} ]}
2、建立1个纵向的立方体,充当玻璃门2
(复制上一个横向的立方体,并旋转90度即可)
代码:
Transform {
translation 0 0.6 0
rotation 0 1 0 1.571 #立方体绕着y轴旋转90度
children [
Shape {
appearance Appearance {
material Material {
diffuseColor 0 0.2 0.5
transparency 0.6
}}
geometry Box {
size 2 1 0.1
}
} ]}
3、制作中间的柱子,应该使用圆柱体几何造型节点
代码:
Transform {
translation 0 0.6 0 #立方体向上移动到0.6位置
children [
Shape {
appearance Appearance {
material Material {
diffuseColor 0 1 0
}}
geometry Cylinder { #圆柱体几何造型节点
height 1.2 #圆柱体高为1.2
radius 0.05 #半径为0.05
}
} ]}
4、制作底面,应该用圆柱体几何造型节点
代码:
Transform {
children [
Shape {
appearance Appearance {
material Material {
diffuseColor 0.8 0.2 0.1
}}
geometry Cylinder { #圆柱体几何造型节点
height 0.06 #圆柱体高为1.2
radius 1.4 #高为1.4
}
} ]}
5、制作顶面,跟上面制作底面是一样的
(在底面的基础上修改位置即可)
代码:
Transform {
translation 0 1.2 0 #圆柱体向上移动到1.2的位置上
children [
Shape {
appearance Appearance {
material Material {
diffuseColor 0.8 0.2 0.1
}}
geometry Cylinder {
height 0.06
radius 1.4
}
} ]}
6、在左右两边添加柱子
(复制“3、中间的柱子”的代码,修改位置和半径即可)
右边柱子代码:
Transform {
translation 1.2 0.6 0 #圆柱体向右移动1.2,向上移动到1.2的位置上
children [
Shape {
appearance Appearance {
material Material {
diffuseColor 0.8 0.2 0.1
}}
geometry Cylinder {
height 1.2
radius 0.09
}
} ]}
左边柱子代码:
Transform {
translation -1.2 0.6 0 #圆柱体向左移动1.2,向上移动到1.2的位置上
children [
Shape {
appearance Appearance {
material Material {
diffuseColor 0.8 0.2 0.1
}}
geometry Cylinder {
height 1.2
radius 0.09
}
} ]}
1-6是制作基本造型,接下来是动画制作部分
7、先将上面的1和2放在同一个坐标节点下
如:Transform {
children [立方体1,立方体2 ]}
8、在7的基础上修改,在Transform前面添加DEF lif
注:DEF的作用是在场景中需要多次使用的同一节点,可以通过节点重定义后,在后面使用引用的方法多次调用。
如:DEF lif Transform { #DEF给玻璃门的Transform节点命名为lif
children [立方体1,立方体2 ]}
9、利用圆柱体传感器,使当用鼠标拖拽时,造型轨迹会类似于圆柱体旋转,简单说就是鼠标拖拽时,造型会沿着y轴旋转。
代码:
DEF blm CylinderSensor { #DEF给传感器CylinderSensor节点命名为blm
offset 0.785 # 设定造型的初始旋转角度,当首次单击鼠标时,造型绕圆柱体中心轴相对 于初始位置旋转角度。
autoOffset TRUE #是否自动记忆上次旋转的终点角度
}
10、最后一步,用ROUTE TO,使事件出口和事件入口通过路径相连
ROUTE 语句 从一个节点的事件出口到另一个节点的事件入口,传送事件的路径叫路由。
代码:
ROUTE blm.rotation_changed TO lif.rotation
#当CylinderSensor圆柱体传感器节点发生改变时,就会影响到Transform坐标变换节点的改变
#rotation_changed(出事件):当鼠标拖拽造型时,传感器不断输出立方体几何节点造型旋转的角度值。
总体代码:
#VRML V2.0 utf8 DEF lif Transform { children [ Transform { translation 0 0.6 0 children [ Shape { appearance Appearance { material Material { diffuseColor 0 0.2 0.5 transparency 0.6 }} geometry Box { size 2 1 0.1 } } ]} Transform { translation 0 0.6 0 rotation 0 1 0 1.571 children [ Shape { appearance Appearance { material Material { diffuseColor 0 0.2 0.5 transparency 0.6 }} geometry Box { size 2 1 0.1 } } ]} ]} Transform { translation 0 0.6 0 children [ Shape { appearance Appearance { material Material { diffuseColor 0 1 0 }} geometry Cylinder { height 1.2 radius 0.05 } } ]} Transform { translation 0 0 0 children [ Shape { appearance Appearance { material Material { diffuseColor 0.8 0.2 0.1 }} geometry Cylinder { height 0.06 radius 1.4 } } ]} Transform { translation 0 1.2 0 children [ Shape { appearance Appearance { material Material { diffuseColor 0.8 0.2 0.1 }} geometry Cylinder { height 0.06 radius 1.4 } } ]} Transform { translation -1.2 0.6 0 children [ Shape { appearance Appearance { material Material { diffuseColor 0.8 0.2 0.1 }} geometry Cylinder { height 1.2 radius 0.09 } } ]} Transform { translation 1.2 0.6 0 children [ Shape { appearance Appearance { material Material { diffuseColor 0.8 0.2 0.1 }} geometry Cylinder { height 1.2 radius 0.09 } } ]} DEF blm CylinderSensor { offset 0.785 autoOffset TRUE } ROUTE blm.rotation_changed TO lif.rotation
最后运行结果:
文章来源:https://www.toymoban.com/news/detail-445282.html
文章来源地址https://www.toymoban.com/news/detail-445282.html
到了这里,关于虚拟现实技术vrml“动画交互“——旋转门练习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!