繁体   English   中英

使用OpenGL移动圆对象?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM