我在我正在制作的opengl游戏中发现了一个难点。我有一个camara类,代码应该都可以工作。即。
void keyboard (unsigned char key, int x, int y) {
keyStates[key] = false;
if (key=='q')
{
xrot += 1;
if (xrot >360) xrot -= 360;
}
if (key=='z')
{
xrot -= 1;
if (xrot < -360) xrot += 360;
}
etc..
}
然而,当我尝试将它放入我的main()时,它会引发异常处理错误。我的主要代码是:
int main(int argc,char** argv)
{
SDL_Init(SDL_INIT_EVERYTHING);
SDL_Surface* screen=SDL_SetVideoMode(640,480,32,SDL_SWSURFACE|SDL_OPENGL);
bool running=true;
Uint32 start;
SDL_Event event;
init();
glutKeyboardFunc(keyboard);
while(running)
{
start=SDL_GetTicks();
while(SDL_PollEvent(&event))
{
switch(event.type)
{
case SDL_QUIT:
running=false;
break;
}
}
display();
SDL_GL_SwapBuffers();
angle+=0.0;
if(angle>360)
angle-=360;
if(1000/30>(SDL_GetTicks()-start))
SDL_Delay(1000/30-(SDL_GetTicks()-start));
}
SDL_Quit();
return 0;
}
抱歉,如果我的代码不清楚,我将blender集成到opengl中。
答案 0 :(得分:1)
首先,您为什么同时使用GLUT和SDL? SDL提供了GLUT所做的所有设施,但通常更好。您可以使用SDL提供的事件队列输入,而不是GLUT的键盘功能。
其次,我很确定在不调用glutInit(argc,argv)的情况下尝试使用任何GLUT函数会导致它难以关闭程序。看一些documentation,情况肯定是这样的。尝试删除它,并扩展SDL事件案例以处理键盘输入。 Here是一个小而简单的例子。