c - 根据点旋转一个对象

  显示原文与译文双语对照的内容
0 0

 O
 position 2



 O Y
 object ( x,y,z )
 position 1

根据固定点( x,y,z ) 和Q 角度旋转旋转对象。 有了opengl我怎么做?

对象从位置 1到位置 2.

我知道Q,( x,y,z ) 。

我已经做到了:


glPushMAtrix ()
glTranslatef ( -x, -y, -z ) ;
glRotatef ( Q, 1.0f, 0.0f, 0.0f );

glCylinder (/*argument*/) 
glPopMatriX ()

时间: 原作者:

0 0

如果你在 3D 空间旋转并且只知道物体。角度和旋转中心,那么你的任务是未定义的。 在 3D 空间中,只能围绕某个轴旋转,而不能旋转。

从你的代码示例中,你绕X 轴旋转。 让我猜猜这就是你想要的。

为了达到这个目的,你应该将坐标系的translte orign设置为旋转中心,执行旋转和转换坐标系。


glTranslatef(-x, -y, -z);
glRotatef(Q, 1.0, 0.0, 0.0);
glTranslatef(x, y, z);
//draw the object

如果知道对象的初始位置和最终位置,则可以计算旋转轴。 ( 因为 3点始终定义一个平面和它的正常。) 在矢量表示中,它应该看上去是错误的。 如果对象沿相反方向旋转,则更改轴或者角度的符号。


axis = vec(center_of_rotation - initial_position, center_of_rotation - final_position)

或者更多 for dummies"


float X1[3];//initial position
float X2[3];//final position
float O[3];//orign of rotation

float OX1[3]; OX1[0] = X1[0] - O[0]; OX1[1] = X1[1] - O[1]; OX1[2] = X1[2] - O[2];
float OX2[3]; OX2[0] = X2[0] - O[0]; OX2[1] = X2[1] - O[1]; OX2[2] = X2[2] - O[2];

float axis[3];//vector product OX1 and OX2
axis[0] = OX1[1]*OX2[2]-OX1[2]*OX2[1];
axis[1] = OX1[2]*OX2[0]-OX1[0]*OX2[2];
axis[2] = OX1[0]*OX2[1]-OX1[1]*OX2[0];

...