翻译+旋转后OpenGL独立翻译?

时间:2012-01-06 01:25:52

标签: math opengl graphics geometry rotation

我想实现翻译/轮换,如下面的视频所示 -

http://www.youtube.com/watch?v=92h0xuV4Yrg

我知道对于独立的平移和旋转,典型的方法是 - 首先旋转对象然后翻译。

如下所示:

PushMatrix();
LoadIdentity(); 
Translate(posx,posy,posz);     // Second, move the object to its final destination
Rotate();        // First, apply rotations (which rotate around object-origin
Draw();         
PopMatrix();

但我的要求是围绕世界坐标旋转对象并使用鼠标移动它。

如视频中所示,旋转是围绕世界 - 原点而不是围绕物体原点进行的。这意味着逻辑应该与上面相反(首先翻译然后进行旋转)

PushMatrix();
LoadIdentity(); 
Rotate();        // Second, apply rotations (which rotate around world-origin)
Translate(posx,posy,posz);     // First, move the object to its final destination
Draw();         
PopMatrix();

但视频中的最终翻译是相对于旋转后的最终位置完成的(这与我使用鼠标操作的posx,posy,posz值不同)。

如何实现这种翻译

1 个答案:

答案 0 :(得分:2)

要围绕任何点(x,y,z)旋转对象,请执行以下操作:

translate (-x,-y,-z);
rotate (angle);
translate (x, y, z);

这一点不一定是对象上的一个点。它可以是原点,也可以是任何随机值,如(1000,0.0023,97.5)。在您的情况下,您可能需要进行额外的翻译。例如,如果您的对象在原点定义,并且用户将其放置在(x1,y1,z1)并且您想要围绕(x,y,z)旋转它,则需要添加:< / p>

translate (x1,y1,z1);
翻译后的

(x,y,z)。