OpenGL glTranslatef/glRotatef无法正常工作

cod*_*fun 2 opengl

我试图创建一个多边形,并在释放鼠标按钮时平移/旋转它.我可以这样做,如果我再次使用glBegin和重绘我的整个多边形,glEnd但我不确定我是否真的需要这个,因为我已经在屏幕上绘制了一次多边形,只是想使用相同的对象并应用旋转/平移它.

我在下面放一个片段.

if(state == GLUT_UP){

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glClear(GL_COLOR_BUFFER_BIT);
    glPushMatrix();
    glRotatef(90,0,0,1);
    //  glTranslatef(50,-50,0);
    /*
    glBegin(GL_POLYGON);
    glVertex2i (-40,40) ; //Specify li ne - se gme nt ge ometry .
    glVertex2i (-30 , -40) ;
    glVertex2i (0 , 20) ;
    glVertex2i (40 , 35) ;
    glEnd() ;
    */
    glClear(GL_COLOR_BUFFER_BIT);
    glPopMatrix();
    glutSwapBuffers();
    //  glutPostRedisplay();
}
Run Code Online (Sandbox Code Playgroud)

dat*_*olf 12

请跟我说:"我再也不会把OpenGL绘图调用放到事件处理程序中了!"

在事件处理程序中,您根据事件设置一些变量,然后发出重绘调用,并在渲染函数中根据变量的内容绘制.

更新:

OpenGL也不会"记住"你画的内容.你发送绘图命令,OpenGL做它的行为,然后忘记它.剩下的唯一痕迹是转向帧缓冲区上像素的片段.但帧缓冲内容不受转换或任何OpenGL状态更改的影响.只有绘图会影响帧缓冲.

  • @ code4fun:你重绘整个事情但是应用了更改.这就是OpenGL应该如何使用.现代GPU每秒可以处理数百万个三角形.重新绘制多边形的三角形对于现代GPU来说是不费力的.您必须了解的是,OpenGL没有"对象"的概念.它所看到的只是调用绘制单个单独的点,线或三角形.它绘制一个点,一条线或一个三角形,并在这样做后立即忘记它. (3认同)