[英]Move Object in Circle using OpenGL?
我有一个要在Open GL / Visual Studio中绕圈移动的对象。 但是到目前为止,物体只是围绕自身旋转。
如何使它循环运动?
当前,它只是立即平移对象,而不是在旋转动画过程中平移。
这是我在显示功能中的代码-因为有人告诉我,如果您不希望对象绕自身旋转,则需要平移。 但是到目前为止,我的对象只是完全忽略了这里的翻译,仍然围绕着自身旋转。
glRotatef(0.0f, 0, 1, 0);
glTranslatef(2.0, 0.0, 0.0);
glRotatef(angle, 0.0, -1.0, 0.0);
drawExcavator(); // draws the object
这是我的动画功能,以后可以定义我在glRotatef调用中使用的角度:
void animate() {
// calculating the time needed for the animation
static long time = clock();
long oldTime = time;
float diffTime;
time = clock();
diffTime = ((float)(time - oldTime)) / ((float)CLOCKS_PER_SEC); // taken from the exercise sheets
// checking if the animation has not been stopped:
if (!pause) {
angle += diffTime*rotateSpeed;
elapsedTime += diffTime;
frameCount++;
// adding up the frames so that they are shown in the window:
if (elapsedTime > 1.0)
{
// counting the fps so that they are outprinted in the window line:
fps = (float)frameCount / elapsedTime;
fps = fps / 100; // for correct frame numbers
elapsedTime = 0.0;
frameCount = 0.0;
}
}
}
您必须交换平移和旋转操作:
glRotatef(angle, 0.0, -1.0, 0.0);
glTranslatef(2.0, 0.0, 0.0);
说明:
翻译:请参阅glTranslate
的文档:
glTranslate
产生xyz
的翻译。 当前矩阵(请参阅glMatrixMode
)乘以此转换矩阵,乘积替换当前矩阵。
旋转:请参阅glRotate
的文档:
glRotate
产生围绕向量xyz
的角度度旋转。 当前矩阵(请参阅glMatrixMode
)乘以旋转矩阵,乘积替换当前矩阵。
翻译矩阵如下所示:
Matrix4x4 translate;
translate[0] : ( 1, 0, 0, 0 )
translate[1] : ( 0, 1, 0, 0 )
translate[2] : ( 0, 0, 1, 0 )
translate[3] : ( tx, ty, tz, 1 )
围绕Y轴的旋转矩阵如下所示:
Matrix4x4 rotate;
float angle;
rotate[0] : ( cos(angle), 0, sin(angle), 0 )
rotate[1] : ( 0, 1, 0, 0 )
rotate[2] : ( -sin(angle), 0, cos(angle), 0 )
rotate[3] : ( 0, 0, 0, 1 )
translate * rotate
的结果是这样的:
model[0] : ( cos(angle), 0, sin(angle), 0 )
model[1] : ( 0, 1, 0, 0 )
model[2] : ( -sin(angle), 0, cos(angle), 0 )
model[3] : ( tx, ty, tz, 1 )
rotate * translate
的结果是:
model[0] : ( cos(angle), 0, sin(angle), 0 )
model[1] : ( 0, 1, 0, 0 )
model[2] : ( -sin(angle), 0, cos(angle), 0 )
model[3] : ( cos(angle)*tx - sin(angle)*tx, ty, sin(angle)*tz + cos(angle)*tz, 1 )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.