找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 493|回复: 0

VR开发宝典,教你认识三维模型的层次关系基本概念

[复制链接]

25

主题

95

回帖

240

积分

中级会员

积分
240
发表于 2017-9-12 12:13:21 | 显示全部楼层 |阅读模式
在创建三维模型时,如何通过Vizard脚本程序将多个简单模型组合成一个复杂模型?
思路设计

首先在专业的建模软件中创建好复杂模型的各个零部件,然后在Vizard程序中将其组装在一起。这种能够方便的单独控制各个零部件的动作行为和交互方式。
添加下面场景初始化的代码,它在虚拟场景中添加了一个旋转木马的主题模型,并为其添加了一个旋转动作。
import viz
import vizact
viz.go()
viz.clearcolor([0.5,0.5,1]) #设定场景的初始颜色为天蓝色
viz.MainView.setPosition([0,1.8,-10]) #设定虚拟视点的位置
viz.addChild('ground_grass.osgb') #添加草地模型
carousel = viz.addChild('carousel.wrl' ) #添加旋转木马的主体模型
carousel.addAction( vizact.spin(0,1,0,20) ) #为主体模型添加旋转的动作

下面需要为旋转木马的主体模型添加一些柱子,这些柱子将随着主体模型一同旋转。这里需要明确,木马的主体模型和柱子之间具有固定的相对位置关系。在Vizard程序中,如果需要设置不同模型之间固定的相对姿态,那么就涉及到模型的层次关系。
模型的层次关系是一种树形结构。如下图所示,图中的每个结点代表了虚拟空间中的一个模型,用户向虚拟空间中添加的任何模型都处于该树形结构中,其中的根结点“root”可以理解为虚拟空间自身。这个树形结构中,每个模型结点都可以有自己的父结点,也可以有自己的子结点。对于每个模型结点,它自身都有一个局部坐标系,这个局部坐标系的原点和轴向是在建模过程中设定的。需要注意:每个模型的局部坐标系都是和模型本身相对固定的,并一起运动。根结点的坐标系也称为世界坐标系,它是静止不动的。

Vizard程序中模型之间的层次关系

旋转木马的模型层次关系
Vizard程序会为每个模型结点分配一个变换矩阵,这个变换矩阵定义了该模型结点相对于其父结点的位置、方向和缩放比例。举例来说,如果某个模型结点的变换矩阵将其相对于父结点平移了[0, 1, 0],而其父结点在虚拟空间中的坐标是[1, 1, 0],那么该模型在虚拟空间中的坐标为[1, 2, 0]。
由此可知,Vizard程序通过遍历模型层次关系的整个树形结构,来计算每个模型结点在虚拟空间中的姿态。例如:为了计算某个模型结点在虚拟空间中的坐标,那么Vizard程序需要从根结点开始将所有结点的偏移向量累加,直至该结点自身的偏移向量,这样才能得到该结点在虚拟空间中的坐标。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|芝加哥华人服务中心

GMT-5, 2024-5-25 10:56 , Processed in 0.088139 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表