假设我在点(50,60,20)
有一个绘图,我想在表格的每一边旋转它。
在下图的基础上,我想将绿色圆圈旋转到右侧,后侧和左侧。我的实施是
glRotatef(plate_rotate, 50, 0, 0);
因为这将位于表格的中间,顶点x = 50.但是这不起作用。
glRotatef(90, 50, 0, 0); would not work.
Table dimension
int xL = 25;
int xR = 75;
int yT = 60;
int yB = 55;
int zF = 25;
int zB = -25;
static float tableTop[8][3] =
{
{ xL, yT, zF },
{ xR, yT, zF },
{ xR, yT, zB },
{ xL, yT, zB },
//bottom
{ xL, yB, zF },
{ xR, yB, zF },
{ xR, yB, zB },
{ xL, yB, zB },
};
答案 0 :(得分:2)
您需要将对象转换为原点,而不是执行您正在执行的操作... glRotatef
中的x,y,z坐标是方向向量而不是空间坐标。 glRotatef (90, 1, 0, 0)
和glRotatef (90, 50, 0, 0)
之间没有区别,因为两个向量在规范化时都是相同的。
glTranslatef ( 50.0f, 0.0f, 0.0f); // 3. Move back
glRotatef (plate_rotate, 1.0f, 0.0f, 0.0f); // 2. Rotate around X-axis
glTranslatef (-50.0f, 0.0f, 0.0f); // 1. Move X=50 to origin