如何使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, ...);
一旦你开始向上和向下看,你也可以使用同样的方法,保持垂直的角度。
相关文章:
- 在C++中使用OpenCV矩阵中的特征将图像旋转90度
- 使用OpenCV 360度视图
- 顺时针旋转90度图像
- 将矩阵逆时针旋转 180 度的问题
- C++向量的向量.阵列旋转 90 度
- 如何使用四元数来描述超过360度的旋转角度?
- 将轴对齐的矩形旋转90度
- 如何使OpenGL相机旋转360度
- 在 iOS 中将 Spirte 矩形旋转 90 度不会显示纵横比
- OpenCV从T形主体获得360度旋转
- 将2D转换的1D阵列顺时针旋转90度
- 合成景观360度
- 处理 360 度范围的最佳方式
- 如何将计算机绘图旋转 90 度
- 如何用OpenCV将图像分成四个象限,并将象限1和象限4旋转180度
- 将矩阵旋转N度
- 展开角度为360度
- OpenGl -对象在旋转180度后反转
- 从帧缓冲区创建的JPEG被旋转180度
- 字节数组,我需要把它旋转 90 度