c++ - Opengl 鼠标相机问题 (gluLookAt)

标签 c++ opengl camera mousemove glulookat

您好,我在 openGL 中的鼠标移动遇到了一个奇怪的问题。这是我用鼠标移动相机的代码

void camera(int x, int y)
{
    GLfloat xoff = x- lastX;
    GLfloat yoff = lastY - y; // Reversed since y-coordinates range from bottom to top
    lastX = x;
    lastY = y;

    GLfloat sensitivity = 0.5f;
    xoff *= sensitivity;
    yoff *= sensitivity;

    yaw += xoff;                // yaw is x
    pitch += yoff;              // pitch is y

    // Limit up and down camera movement to 90 degrees
    if (pitch > 89.0)
        pitch = 89.0;
    if (pitch < -89.0)
        pitch = -89.0;

    // Update camera position and viewing angle
    Front.x = cos(convertToRads(yaw) * cos(convertToRads(pitch)));
    Front.y = sin(convertToRads(pitch));
    Front.z = sin(convertToRads(yaw)) * cos(convertToRads(pitch));
}

convertToRads() 是我创建的一个小函数,用于将鼠标坐标转换为弧度。

使用此代码,我可以随心所欲地移动相机,但如果我尝试一直向上移动,当达到 45 度左右时,它会围绕 x 轴旋转 1-2 次,然后继续增加 y 轴。我不明白我是否做错了什么,所以如果有人可以提供帮助,我将不胜感激。

最佳答案

您似乎放错了括号:

Front.x = cos(convertToRads(yaw) * cos(convertToRads(pitch)));

而不是:

Front.x = cos(convertToRads(yaw)) * cos(convertToRads(pitch));

关于c++ - Opengl 鼠标相机问题 (gluLookAt),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34424336/

相关文章:

macos - NSOpenGLView 不会清除

c++ - 从固定流水线转向现代 OpenGL

android - 设置 Android 照片 EXIF 方向

c++ - 取消引用集合迭代器会导致seg错误

c++ - glGenBuffers - 释放内存?

c++ - 我可以从静态基方法获取当前类类型 ID 吗?

Android 捕获视频 mediaRecorder.start() 失败 -19

android - 从 MainActivity 使用 Camera API SurfaceView 直接打开 Activity 时出错

c++ - 缺少 SDKDDKVer.h,但安装了 WinSDK? (C++ 头文件问题)

c++ - 如何设计一个始终是另一个类的成员的类