给定一个4x4的齐次矩阵,如何获取3D世界坐标?

4
我有一个物体,先旋转再平移,然后再旋转。我将这些变换的矩阵存储为对象成员。现在,当我需要选取对象时,我需要知道该对象的三维世界坐标。
目前,我已经能够获取对象的位置,如下所示:
coords[0] = finalMatrix[12]; coords[1] = finalMatrix[13]; coords[2] = finalMatrix[14];
这给出了正确的对象位置,但我也想考虑旋转。
如果有帮助,非常感谢……

有一个针对OpenGL 1.2版本的拾取(和选择)教程。他们推荐使用特殊的渲染模式,在该模式下每个对象都会获得其独特的颜色 - 这被解释为对象识别器。遵循这种方法,您不需要知道任何旋转信息。 - Rekin
谢谢,Rekin。我知道我所做的不是最优化的方法。我只是利用这个机会学习更多关于矩阵和旋转等方面的知识。你有拾取教程的链接吗?我正在使用OpenGL ES,所以我不得不为那些在标准GL中不可用的东西找到解决方法。谢谢。 - Stoff81
我认为这对您没有太多帮助,所以我没有将其发布为答案,只是一个提示。链接是:http://www.lighthouse3d.com/opengl/picking/ - Rekin
嗯,我不认为在ES上会起作用,但还是谢谢你! - Stoff81
3个回答

2
矩阵是一个4x4的矩阵,但由于您只有一个单维矩阵,因此元素排列如下:
[0]  [4]  [8]   [12]
[1]  [5]  [9]   [13]
[2]  [6]  [10]  [14]
[3]  [7]  [11]  [15]

旋转部分是左上角的3x3矩阵,请参见此处,所以在您的情况下,它将是元素[0]-[2][4]-[6][8]-[10]

@Stoff81 - 我不确定我理解你的问题。你实际上想要实现什么? - ChrisF
@Stoff81 - 值 [12]-[14] 给出了位置 - 正如您在问题中所确定的那样 - 获取旋转会改变什么? - ChrisF
嗯,你搞糊涂我了,哈哈...只是当我开始旋转/移动我的物体时,拾取就不再起作用了,所以我开始想到需要考虑旋转。 - Stoff81
@Stoff81 - 我现在明白了。是的,你确实需要考虑旋转 - 但是,我的解释能力正在失败。我只能建议你阅读我链接的页面并搜索其他教程。它们应该(希望)会更清晰。 - ChrisF
@Stoff81 - 看起来是这样的 - 不过你可能需要矩阵的逆。我总是记不住 ;) - ChrisF
显示剩余2条评论

2

那是我贴的同一个链接 ;) - ChrisF

2

所以我是个白痴......一开始就把它搞对了。我只需要[12][13][14]的位置数据。我的代码有几个愚蠢的错误,其中一个是射线相交时迭代次数不够......现在都解决了,哈哈,我自己揍自己......谢谢大家!!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接