-1

我编写了一个 opengl 代码,在对象上绘制一些对象、灯光和纹理。箭头等特殊键旋转我的纹理映射对象。但如果我继续旋转它们约 10 秒,我什至无法关闭 opengl 窗口。我没有发布我的代码,它有点长,我不知道它的哪一部分会减慢它的速度。

4

1 回答 1

1

根据您在评论部分的回答,我想我知道发生了什么。

glutSpecialFunc 调用我的箭头处理函数。在箭头处理程序中: if(GLUT_KEY_UP) {//rotate glutPostRedisplay();} if(GLUT_KEY_DOWN ....) ...... 以此类推

这不是在 glut 程序中处理键盘事件的正确方法。您实际上导致渲染循环中完成的工作量根据用户按键的数量而变化。

而不是发布重新显示以响应击键,您应该有一个主绘图循环,该循环继续独立于键盘活动重绘场景。您还需要有用于位置(x、y、z)的状态变量和用于查看旋转的角度。绘图例程使用这些状态变量中的 x、y、z 和旋转信息简单地绘制您的场景。

然后,对于您的键盘处理,您只需根据您在程序中支持的击键来适当地更改这些状态​​变量。主绘图循环将自动响应这些更改,因为它与键盘处理程序自由异步运行。

于 2012-12-30T21:19:36.203 回答