我想实现翻译/轮换,如下面的视频所示 -
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值不同)。
如何实现这种翻译
答案 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)。