我正在关注这些关于现代 OpenGL 的教程。我已经完成了 15 号“相机控制 - 第 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;
}
我不确定我是否在这里做了一些奇怪的事情,或者我只是有一个糟糕的 glut 版本(对我来说似乎不太可能)或者教程是否是错误的......我是否需要在我之前设置一些 glut 特定的东西可以调用 glutWarpPointer() 吗?我是 glut 的新手,也是现代 OpenGL 的新手(我首先学习了即时模式)。快速的谷歌搜索对我没有多大帮助。任何帮助,将不胜感激。
编辑:我在 Windows 上,我正在使用 mingw 4.5
Edit2:这些是窗口给我的有关崩溃的详细信息:
问题事件名称:APPCRASH
应用程序名称:modern_opengl.exe
应用程序版本:0.0.0.0
应用程序时间戳:51044575
故障模块名称: glut32.dll 故障
模块版本:0.0.0.0
故障模块时间戳:3BEA4FF3
异常代码: C0000005
异常偏移量:0000A879
OS版本:6.2.9200.2.0.0.256.48
区域设置:1043
附加信息1:5861
附加信息2:58618222C64908B2
附加信息3:F3D5
附加信息4:F3D5BE0CAD2787555264647DC02181C3
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(this=0x4aa0e0, width=800, height=600, Pos=..., Target=..., Up=...) (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 GLOBAL _sub_I_vertices() (C:\CodeBlocks\projects\现代_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)