2017-11-11 296 views
-1

有人可以给我公式吗? 我有一个vector3d表示一个顶点在本地坐标中的位置,我有一个Matrix3d表示这个顶点是它几何体的一部分的对象的旋转和位置,我该如何将这个顶点的局部位置转换为世界坐标?公式将当地坐标转换为世界坐标

+0

我认为你需要代表顶点翻译的** Matrix3D **,然后用https://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/将它乘以容器的** Matrix3D ** geom/Matrix3D.html#append()我认为哪一个是附属的,哪一个是附属的,这很重要,但是你只有2个选项,所以它不会伤害你只是尝试。 – Organis

+0

如果该矩阵位于全局坐标中,那么为了得到该顶点的全局坐标,需要将该矩阵求逆,然后将结果与您的vector2d相乘。确保检查'matrix3D :: invert()'结果,如果它是假的,那么你就搞砸了。 – Vesper

+0

“我认为你需要表示顶点翻译的Matrix3D” - 我该如何创建这个matrix3d?像这样:m = new matrix3d; m..prependTranslation(V.X,V.Y,V.Z);或者像这样m.position.x = v.x; m.position.y = V.Y; m.position.z = V.Z; ? – danielkotzer

回答

0

现在它的工作,我有一个问题,保持原来的vertex3d,我玩的命令,这是工作,非常感谢,这里是代码,我不得不使用m2.invert();这里是代码:

var m3d:Matrix3D = new Matrix3D();  
obj.Transform.copyToMatrix3D(m3d); 
var m2:Matrix3D = new Matrix3D(); 
m2.append(m3d); 
m2.invert(); 
m2.prependTranslation(obj.BoundingBox[i].x,obj.BoundingBox[i].y,obj.BoundingBox[i].z); 
obj.BoundingBox[i] = new Vector3D(m2.position.x,m2.position.y,m2.position.z); 

其实,我首先做的还行:

var m3d:Matrix3D = new Matrix3D();  
obj.Transform.copyToMatrix3D(m3d); 
m3d.invert(); 
obj.BoundingBox[i] = m3d.transformVector(obj.BoundingBox[i]); 

我唯一缺少的就是反转();我希望我知道它是什么... 有些人告诉我,我必须追加(或预先)对象矩阵,然后世界矩阵,这是有道理的,但添加世界矩阵只会导致我的问题,而倒置();做得很好,但为什么?

Vesper,你是一个人建议它,谢谢,但为什么?

我知道为什么,有经验的人给了我答案:相机显示了一切镜像,当你离开时,世界似乎正在​​向右移动,所以你需要反转。

相关问题