OpenGL相机太落后了
OpenGL camera is laggy
我按照本教程设置了一台相机。我的问题是,当我移动时,它不是流动的,它有点跳跃。每当鼠标移动时,我都会使用以下代码计算MVP:
void motion(int x, int y) {
static bool wrap = false;
if(!wrap) {
int ww = glutGet(GLUT_WINDOW_WIDTH);
int wh = glutGet(GLUT_WINDOW_HEIGHT);
int dx = x - ww / 2;
int dy = y - wh / 2;
const float mousespeed = 0.001;
angles.x += dx * mousespeed;
angles.y += dy * mousespeed;
if(angles.x < -M_PI)
angles.x += M_PI * 2;
else if(angles.x > M_PI)
angles.x -= M_PI * 2;
if(angles.y < -M_PI / 2)
angles.y = -M_PI / 2;
if(angles.y > M_PI / 2)
angles.y = M_PI / 2;
lookat.x = sinf(angles.x) * cosf(angles.y);
lookat.y = sinf(angles.y);
lookat.z = cosf(angles.x) * cosf(angles.y);
view = glm::lookAt(position, position + lookat, glm::vec3(0, 1, 0));
// move mouse pointer back to the center of the window
wrap = true;
glutWarpPointer(ww / 2, wh / 2);
} else {
wrap = false;
}
}
然后我更新我的"OnIdele()"函数的属性:
void onIdle() {
glUseProgram(program);
glm::mat4 Projection = glm::perspective(45.0f, 4.0f / 3.0f, 0.1f, 100.0f);
glm::mat4 Model = glm::mat4(1.0f);
glm::mat4 MVP = Projection * view * Model;
glUniformMatrix4fv(uniform_mvp, 1, GL_FALSE, glm::value_ptr(MVP));
glutPostRedisplay();
}
我的问题是,这是实现这一目标的正确方式吗?有什么办法可以避免这种落后症吗?
如果你不介意我问,这个代码到底是如何工作的?我知道它限制了你的视线,但我似乎无法理解它:
if(angles.x < -M_PI)
angles.x += M_PI * 2;
else if(angles.x > M_PI)
angles.x -= M_PI * 2;
if(angles.y < -M_PI / 2)
angles.y = -M_PI / 2;
if(angles.y > M_PI / 2)
angles.y = M_PI / 2;
查看增加mousespeed
是否会有所不同。找到鼠标移动的距离(存储在dx
和dy
中)后,按mousespeed
缩放距离,然后将其添加到相机的角度。mousespeed
的值越低,鼠标移动对相机角度的影响就越小,反之亦然。
此外,您询问的代码将您的相机角度限制在0到PI*2之间,或0到360度之间。
相关文章:
- 了解 GLM- openGL 中的相机转换
- OpenGL相机和相机空间转型的困惑
- OpenGL 相机移动程序顶点着色器问题
- OpenGL 正交相机变焦无法正常工作
- 在 opengl 中翻译相机时遇到问题
- 如何使用gluLookAt围绕OpenGL中的点旋转相机视图
- OpenGL - 让相机移动
- OpenGL使对象坚持到相机
- OpenGL-绘制相机空间后,将模型放置在世界空间中
- 将相机变换应用于 OpenGL
- 定向图形以使用 OpenGL 查看相机
- 如何使OpenGL相机旋转360度
- 用于相机的C++OpenGL四元数将其倒置
- C++OpenGl相机旋转使用四元数问题
- OpenGL-第一人称相机矩阵出现问题
- 使用OpenGL 3.3和Qt 5.6创建相机
- OpenGL:如何根据相机距离对点进行排序
- 创建一个围绕对象 OpenGL C++旋转的相机
- glulookat()-使用键盘移动相机(OpenGL)
- 变换相机OpenGL