-1
有人可以给我公式吗? 我有一个vector3d表示一个顶点在本地坐标中的位置,我有一个Matrix3d表示这个顶点是它几何体的一部分的对象的旋转和位置,我该如何将这个顶点的局部位置转换为世界坐标?公式将当地坐标转换为世界坐标
有人可以给我公式吗? 我有一个vector3d表示一个顶点在本地坐标中的位置,我有一个Matrix3d表示这个顶点是它几何体的一部分的对象的旋转和位置,我该如何将这个顶点的局部位置转换为世界坐标?公式将当地坐标转换为世界坐标
现在它的工作,我有一个问题,保持原来的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,你是一个人建议它,谢谢,但为什么?
我知道为什么,有经验的人给了我答案:相机显示了一切镜像,当你离开时,世界似乎正在向右移动,所以你需要反转。
我认为你需要代表顶点翻译的** Matrix3D **,然后用https://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/将它乘以容器的** Matrix3D ** geom/Matrix3D.html#append()我认为哪一个是附属的,哪一个是附属的,这很重要,但是你只有2个选项,所以它不会伤害你只是尝试。 – Organis
如果该矩阵位于全局坐标中,那么为了得到该顶点的全局坐标,需要将该矩阵求逆,然后将结果与您的vector2d相乘。确保检查'matrix3D :: invert()'结果,如果它是假的,那么你就搞砸了。 – Vesper
“我认为你需要表示顶点翻译的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