我正在关注现代OpenGL的these教程。我已经完成了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;
}
我不确定我是否在这里做了一些奇怪的事情,或者我是否只有一个糟糕的过剩版本(对我来说似乎不太可能)或者教程是错的......我是否需要设置过多的东西具体之前,我可以调用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(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 \ modern_opengl \ main.cpp:177)
5 0043595B __do_global_ctors()(.. / modw / gccmain.c:59)
6 00401098 __mingw_CRTStartup()(.. / mingw / crt1.c:236)
7 00401284 mainCRTStartup()(.. / modw / crt1.c:264)
答案 0 :(得分:2)
你的函数似乎在c_camera :: Init中,它似乎在main
之前被调用,可能是因为它被实例化为一个全局对象(在输入main
之前构造了全局变量)。您应该延迟过度通话,直到您输入main
并调用被叫glutInit
。