【发布时间】:2013-06-30 04:52:37
【问题描述】:
大家好,
如图所示,
我有一个名为 O(线条集)的对象。它的对象坐标系是 (x',y',z')。 我使用以下代码 sn-p 在我的 OpenGL 场景中翻译、旋转这个对象:
glPushMatrix();
glTranslatef(Oz, Oy,Oz);
glRotatef(rotationX , 1.0, 0.0, 0.0);
glRotatef(rotationY, 0.0, 1.0, 0.0);
glRotatef(rotationZ, 0.0, 0.0, 1.0);
contour->render();
glPopMatrix()
;
我有一个名为 H 的点,它使用 (hx,hy,hz) 转换为世界坐标
glPushMatrix();
glTranslatef(hx,hy,hz);
glPopMatrix();
如果我是正确的,(Oz,Oy,Oz) 和 (hx,hy,hz) 是世界坐标。
现在,我要做的是计算 H (hx,hy,hz) 相对于 O 的对象坐标系的位置。(x',y',z'); 据我了解,我可以通过计算对象 O 的逆变换并将其应用于点 H 来做到这一点。
对此有什么建议吗? OpenGL 是否提供任何逆矩阵计算功能?如果我以某种方式找到逆矩阵,它们相乘的顺序是什么?
注意:我想实现类似“锤子”的工具,在 H 点,我绘制一个半径为 R 的球体。用户可以使用这个球体像锤子一样切割物体 O。我已经在 2D 中实现了这个,所以我如果我可以计算锤子位置,可以使用相同的算法 相对于 (x',y',z')
提前致谢。
【问题讨论】:
-
如果我理解你的问题,不就是
{Ox - hx, Oy - hy, Oz - hz}(即glTranslatef(Ox - hx, Oy - hy, Oz - hz);)吗?如果您已经有了全局向量O和h,那么这只是向量减法的简单问题,矩阵操作完全不在等式中。顺便说一句,您最初的解决方案听起来是正确的。 -
嗨,我必须更改对象 O 的原始对象坐标。也就是说,我必须比较对象坐标,而不是世界坐标。
-
不用担心。快速复习提醒我 OpenGL 不提供通用矩阵库。您需要为此使用单独的库,或者自己执行计算 (mathworld.wolfram.com/MatrixInverse.html)。
标签: opengl matrix geometry matrix-inverse