|
发表于 2013-5-13 12:02:02
|
显示全部楼层
本帖最后由 VR_user_happy 于 2013-5-13 12:07 编辑
1.
那个放大并不是ive导入osg中造成的-------------->这个正确
osg平台之上显示模型,如果有3DS插件,就可以直接读取*.3DS,如果没有,就需要转化为OSG平台可以认出的模型格式(*.ive,*.osg)
2.
3dmax的模型 是*.3DS格式
*.3DS转化为*.ive 就是A--->B的过程
*.3DS转化为*.osg 就是A--->C的过程
过程1:
*.3DS转化为*.ive 就可能已经存在放大
3.
*.ive 写出其中的子节点 *.OSG
存在2个应该注意的问题:
子节点 node 如果本身是Transform类型,父节点是Transform类型,
请记住父亲节点的Transform也会作用到子节点上!
每个节点的实际大小:
是所有父亲节点的Transform的累计与本节点的Transform一起叠加作用
你再写出前,就要做矩阵的叠加运算后,才能写出!(或者保留父节点Transform的)
所以你的遍历后的做法并不适用于所有的模型,他只适用于纯的不带数学属性(带Transform)的模型的写出!
2种做法可以保证模型的在写出子节点(同种类型的文件格式)大小不发生改变:
方式1:保留每一级父亲节点的所带的Transform,这种方法必须明确每一级的结构
方式2:就是取出每一级的Transform做矩阵累计运算,得到最后只有一个总变化量的Transform
再把它挂接到你的非Transform的节点上
node->asgroup()和node->asTransform()这种判断本身就没有明白Transform的属性
Transform节点本身就是Group类型
应该用动态映射判断Dynamic_cast()是否是Transform节点
过程2:
还有一个问题就是你将导出的*.OSG再在3DMAX下显示:
a.利用插件直接显示*.OSG(如果只有这一种类型的模型,没有其他类型),就不存在是否放大与缩小;如果有其它格式(如*.3ds),那就是这2种格式的差异,就相当于把*.OSG-->*.3ds了
b. 如果*osg .-->*.3ds再在在3DMAX下显示,就是C-->A的过程
会存在格式上的放大或者缩小了!
|
|