繁体   English   中英

如何使OpenGL相机旋转360度

[英]How can I make my OpenGL camera turn 360 degrees

我目前正在进行实体移动,但是我注意到相机只有“ 180度”“视角”,并且不会越过这个位置。 尝试在达到阈值或任何阈值之后转动,将使照相机真正变慢并且需要很长时间才能返回。 我希望能够360度旋转世界。 这可能吗? 我有一个简短的gif来演示

到gif快结束时,很明显,运动开始减速并停止。

如果有人可以帮助我解决背后的数学问题,或者为什么会发生这种情况,将不胜感激。 我在网上四处张望,找不到任何相关内容。

    case GLUT_KEY_LEFT:
        base->camera->angle += 3.0f;
        break;

    case GLUT_KEY_RIGHT:
        base->camera->angle -= 3.0f;

        break;


camera->lookat->z = sin(camera->angle);
camera->lookat->x = cos(camera->angle);


gluLookAt(camera->position->getX(), camera->position->getY(), camera->position->getZ(),
            camera->lookat->getX(), camera->lookat->getY(), camera->lookat->getZ(),
            camera->up->getX(), camera->up->getY(), camera->up->getZ());//camera

您的视线计算需要考虑相机的位置。

由于您要使相机围绕其位置旋转,因此需要:

camera->lookat->z = camera->position->getZ() + sin(camera->angle);
camera->lookat->x = camera->position->getX() + cos(camera->angle);

您需要使用三角函数,并且还需要更改所查看的x坐标。 看一下单位圆 随着增加或减小x坐标,您将越来越接近x = 0线。要实际向后看,您需要更改所看的y坐标。

因此,在OpenGL中,这意味着保持一个角度,即您正在看的方向。在事件循环中,您将对其进行更新:

case GLUT_KEY_LEFT:
    camera->angle_look_at -= 5; // 5 is a totally random value.
                        // You can choose something more appropriate
    break;

case GLUT_KEY_RIGHT:
    camera->angle_look_at += 5;
    break;

调用gluLookAt时,应使用该角度生成要查看的坐标。

x = sin(camera->angle_look_at);
y = 0; // Or any other number.
z = cos(camera->angle_look_at);
gluLookAt(..., x, y, z, ...);

一旦开始向上和向下查找,就可以使用相同的方法,即保持垂直方向的角度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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