我目前正在使用带有 GLUT 库的 Microsoft Visual C++2010 express,我可以在我的void draw()
函数中轻松地绘制不同的网格。在此之后,我尝试在动画函数中创建不同的“阶段”,每个阶段都调用不同的 - model.draw("object1")
-。然后,当我尝试使用keyboardown函数更改当前阶段时,它首先工作,但是一旦我使用鼠标移动对象,窗口就会变黑。有什么提示吗?
这是有效的绘图功能:
void draw()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt( 2, 2, -250, 0, 0, 0, 0, 1, 0);
glRotatef(spin_y, 1.0, 0.0, 0.0);
glRotatef(spin_x, 0.0, 1.0, 0.0);
model.Draw("object1");
model.Draw("object2");
glutSwapBuffers();
}
这就是删除 model.Draw("..."); 后动画不起作用 从绘图功能:
void animation(int t)
{
switch (phase) {
case 0:
break;
case 1:
model.Draw("object2");
glutSwapBuffers();
break;
case 2:
model.Draw("object1");
glutSwapBuffers();
break;
}
glutTimerFunc((int) 1000/FPS, animation, 0);
}
这就是键盘功能:
void keyboardDown(unsigned char key, int x, int y) {
switch(key) {
case '1':phase=1;break;
case '2':phase=2;break;
case 'Q':
case 'q':
case 27:
exit(0);
}
}
这个函数应该让我使用鼠标移动来移动对象,更新 draw() 中使用的 spin_x spin_y 的值:
void mouseMotion(int x, int y)
{
spin_x = x - old_x;
spin_y = y - old_y;
glutPostRedisplay();
}
model.draw(...)
并且在删除draw()
函数之前它可以完美运行,但是当我尝试使用动画时,它们就会消失。我也试过在func 中添加glutPostRedisplay()
after但它仍然不起作用。model.draw(...)
animation()
这是主要的:
int main(int argc, char** argv)
{
int width = 800;
int eight = 600;
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize(width, eight);
glutInitWindowPosition(100, 100);
glutCreateWindow("Perspective's GLUT Template");
glutKeyboardFunc(keyboardDown);
glutKeyboardUpFunc(keyboardUp);
glutMouseFunc(mouseClick);
glutMotionFunc(mouseMotion);
glutReshapeFunc(reshape);
glutDisplayFunc(draw);
glutIdleFunc(idle);
glutTimerFunc((int) 1000/FPS, animation, 0);
glutIgnoreKeyRepeat(false);
int subMenu = glutCreateMenu(menu);
glutAddMenuEntry("Do nothing", 0);
glutAddMenuEntry("Really Quit", 'q');
glutCreateMenu(menu);
glutAddSubMenu("Sub Menu", subMenu);
glutAddMenuEntry("Quit", 'q');
glutAttachMenu(GLUT_RIGHT_BUTTON);
initGL(width, eight);
glutMainLoop();
return 0;
}
我也加glutSwapBuffers()
了animation func,不知道为什么我没有先写。