c++ - glutWarpPointer 崩溃

标签 c++ opengl glut

我正在关注 these现代 OpenGL 教程。我已经完成了第 15 个“Camera Control - Part 2”。本教程建议使用 glutWarpPointer()。问题是,我的程序在那次调用时崩溃了。这是我的代码:

c_camera::c_camera(int width, int height, const c_vector3f& Pos, const c_vector3f& Target, const c_vector3f& Up){
    m_windowWidth = width;
    m_windowHeight = height;
    m_pos = Pos;

    m_target = Target;
    m_target.Normalize();

    m_up = Up;
    m_up.Normalize();
    Init();
}

void c_camera::Init(){
    c_vector3f HTarget(m_target.x, 0.0, m_target.z);
    HTarget.Normalize();

    if (HTarget.z >= 0.0f){
        if (HTarget.x >= 0.0f){
            m_AngleH = 360.0f - (asin(HTarget.z) TO_DEG);
        } else {
            m_AngleH = 180.0f + (asin(HTarget.z) TO_DEG);
        }
    } else {
        if (HTarget.x >= 0.0f){
            m_AngleH = (asin(-HTarget.z) TO_DEG);
        } else {
            m_AngleH = 90.0f + (asin(-HTarget.z) TO_DEG);
        }
    }

    m_AngleV = -(asin(m_target.y) TO_DEG);

    m_OnUpperEdge = false;
    m_OnLowerEdge = false;
    m_OnLeftEdge = false;
    m_OnRightEdge = false;
    m_mousePos.x = m_windowWidth / 2;
    m_mousePos.y = m_windowHeight / 2;

    cout << "this gets printed just fine" << endl;

    glutWarpPointer(500,400); //program crashes

    cout << "this doesn't get printed" << endl;
}

我不确定我是否在这里做了一些奇怪的事情,或者我是否只是有一个糟糕的过剩版本(对我来说似乎不太可能)或者教程是否错误......我是否需要设置过剩的东西具体在我可以调用 glutWarpPointer() 之前?我是过剩的新手,也是现代 OpenGL 的新手(我首先学习了即时模式)。 快速谷歌搜索对我帮助不大。任何帮助,将不胜感激。

编辑:我在 Windows 上,我使用的是 mingw 4.5

Edit2:这些是窗口给我的关于崩溃的详细信息:
问题事件名称:APPCRASH
应用名称:modern_opengl.exe
应用版本:0.0.0.0
申请时间戳:51044575
故障模块名称:glut32.dll
故障模块版本:0.0.0.0
故障模块时间戳:3bea4ff3
异常代码:c0000005
异常偏移:0000a879
操作系统版本:6.2.9200.2.0.0.256.48
区域设置 ID:1043
附加信息 1:5861
附加信息 2:5861822e1919d7c014bbb064c64908b2
附加信息 3:f3d5
附加信息 4:f3d5be0cad2787556264647dc02181c3

Edit3:这是我的调用堆栈:
0 1000A879 glutWarpPointer() (C:\Windows\system\glut32.dll:??)
1 004033FB c_camera::Init(this=0x4aa0e0) (C:\CodeBlocks\projects\modern_opengl\c_camera.cpp:50)
2 00403164 c_camera::c_camera(这个=0x4aa0e0,宽度=800,高度=600,位置=...,目标=...,向上=...)(C:\CodeBlocks\projects\modern_opengl\c_camera.cpp :18)
3 00402F4B __static_initialization_and_destruction_0(__initialize_p=1, __priority=65535) (C:\CodeBlocks\projects\modern_opengl\main.cpp:55)
4 00403004 全局_sub_I_vertices() (C:\CodeBlocks\projects\modern_opengl\main.cpp:177)
5 0043595B __do_global_ctors() (../mingw/gccmain.c:59)
6 00401098 __mingw_CRTStartup() (../mingw/crt1.c:236)
7 00401284 mainCRTStartup() (../mingw/crt1.c:264)

最佳答案

你的函数似乎在 c_camera::Init 中,它似乎在 main 之前被调用,可能是因为它被实例化为一个全局对象(globals 是在 main 之前构造的> 被输入)。您应该延迟 glut 调用,直到您输入 main 并调用 glutInit 被调用。

关于c++ - glutWarpPointer 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14541485/

相关文章:

c++ - 用 OpenGL 绘制三角形 : how to manage with two classes

c++ - 在前景中呈现文本

c++ - 在其一侧显示 glutSolidCone

c++ - 如何处理多个 websocket++ 选项卡/窗口?

c++ - 如果原始像素在新图像中为黑色,则 Qt 绘制蓝色像素

c++ - 在 Visual Studio 2019 中本地禁用 "Treat Warnings As Error"配置

c++ - 如何将 std::string 变量传递给函数

opengl - glDrawElements 不使用着色器?

c++ - GLUT 中的平滑运动

java - 纹理图集 纹理坐标数学