Opengl GLF问题
我正在尝试一个非常基本的代码示例。我画了一个opengl对象,用键盘旋转它。我不使用键盘也试过同样的方法。我打开一个线程,每5秒钟调用一次相同的Opengl GLF问题,opengl,graphics,glut,Opengl,Graphics,Glut,我正在尝试一个非常基本的代码示例。我画了一个opengl对象,用键盘旋转它。我不使用键盘也试过同样的方法。我打开一个线程,每5秒钟调用一次相同的glRotatef函数(与我在键盘函数中使用的glRotatef相同)。但是没有旋转。有什么问题?下面是我的线程代码: void movePlayer2() { while(1) //if(key == 'a') { Sleep(5000); glRotatef(25,1,0,0); //gluLookAt(0,0,
glRotatef
函数(与我在键盘函数中使用的glRotatef
相同)。但是没有旋转。有什么问题?下面是我的线程代码:
void movePlayer2()
{
while(1)
//if(key == 'a')
{
Sleep(5000);
glRotatef(25,1,0,0);
//gluLookAt(0,0,0.01,0,0,-5,0,1,0);
display();
}
}
这是我的基本代码:
int main(int argc, char **argv)
{
initGL(argc, argv);
HANDLE thread_id2=CreateThread( NULL , 0 , (LPTHREAD_START_ROUTINE)f , NULL , 0 , 0 );
HANDLE thread_id22=CreateThread( NULL , 0 , (LPTHREAD_START_ROUTINE)movePlayer2 , NULL , 0 , 0 );
glutMainLoop();
return 0;
}
void initGL(int argc, char **argv)
{
glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
glutInitWindowPosition(0, 0);
glutInitWindowSize(512, 512);
glutInit(&argc, argv);
glutCreateWindow("deneme");
glutDisplayFunc(display);
}
void display()
{
glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glutWireTeapot(0.5);
glutSwapBuffers();
}
void f()
{
while(1)
{
Sleep(5000);
glRotatef(0.2,1,0,0);
glutPostRedisplay();
printf("dsdasd\n");
display();
}
}
OpenGL上下文绑定到线程,即只要OpenGL上下文被绑定(通过gl*MakeCurrent),只有从该上下文绑定到的线程进行的函数调用才会影响该上下文。可以将上下文绑定到另一个线程(首先解除绑定)。或者简单地说,它根本不符合你的想法 无论如何,你的方法是完全错误的。OpenGL不是一个场景图。glRotatef仅影响modelview矩阵。OpenGL不知道对象,只知道原语
OpenGL中的基本模式是,在绘图之前设置所有需要的状态。因此,在循环中调用display函数,在其中设置viewport和projection,然后遍历所有对象,为每个对象设置适当的modelview矩阵。根据您的应用程序,您可以在显示功能中多次执行这些步骤。在您的例子中,计时器应该做的是增加旋转角度,然后在display函数中使用旋转角度来创建适当的modelview矩阵。display()做什么?特别是,您确定要在无限循环中调用GLUTPOSTRDISPLAY吗?您能提供更多的代码吗?你的透视图设置/循环等?啊,有没有可能你每一帧都重置你的矩阵?我会先用一个线程让它工作。为什么你有多个线程?这是怎么回答这个问题的?@genpfault,看起来是想把这个问题编辑成他的原始问题@cemal,您可以单击原始问题中的编辑链接将此代码示例添加到那里。