Tao OpenGL C# Tab 不旋转

Tao OpenGL C# Tab Not Rotate

为什么我的 OpenGL 放在标签栏时不旋转?

    private void simpleOpenGlControl1_Paint_1(object sender, PaintEventArgs e)
    {
        Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT);

        Gl.glMatrixMode(Gl.GL_MODELVIEW);
        Gl.glLoadIdentity();

        Gl.glTranslated(0, 0, -5);

        Gl.glRotated(yrot += 1, 1, 1, 0);


        Gl.glPointSize(3);
        Gl.glPolygonMode(Gl.GL_FRONT, Gl.GL_LINES);
        Gl.glPolygonMode(Gl.GL_BACK, Gl.GL_LINES);
        Gl.glBegin(Gl.GL_QUADS);
        {
            ////Vista posterior
            Gl.glColor3ub(255, 0, 255);
            Gl.glVertex3d(0, 1, -1);
            Gl.glVertex3d(1, -1, -1);
            Gl.glVertex3d(-1, -1, -1);
            Gl.glVertex3d(0, 1, -1);

            ////DEBAJO
            Gl.glColor3ub(0, 255, 255);
            Gl.glVertex3d(-1, -1, -1);
            Gl.glVertex3d(1, -1, -1);
            Gl.glVertex3d(1, -1, 1);
            Gl.glVertex3d(-1, -1, 1);

            ////POR LA IZQUIERDA
            Gl.glColor3ub(255, 255, 0);
            Gl.glVertex3d(0, 1, -1);
            Gl.glVertex3d(-1, -1, -1);
            Gl.glVertex3d(-1, -1, 1);
            Gl.glVertex3d(0, 1, 1);

            ////POR LA DERECHA
            Gl.glColor3ub(0, 0, 255);
            Gl.glVertex3d(0, 1, 1);
            Gl.glVertex3d(1, -1, 1);
            Gl.glVertex3d(1, -1, -1);
            Gl.glVertex3d(0, 1, -1);



            Gl.glColor3ub(255, 0, 0);
            Gl.glVertex3d(0, 1, 1);
            Gl.glVertex3d(-1, -1, 1);
            Gl.glVertex3d(1, -1, 1);
            Gl.glVertex3d(0, 1, 1);

            Gl.glEnd();
        }

我打开了选项卡,但是当我单击另一个选项卡并返回到 OpenGL 选项卡时,3D 对象发生了变化,但它没有旋转。

除非您使用计时器强制每秒重新绘制任意 N 次,否则绘制事件仅在需要时发生。

切换tab时,需要重绘,会发生paint事件。这就是为什么你此时看到了一点变化。

你可能会通过 reducing/maximizing 你的 window 等看到同样的东西......

你应该:

  • 使用定期调用 Invalidate 或等效函数的计时器。
  • 不要在 paint 事件上更新 yrot。因为你不知道它什么时候被调用,所以你无法控制旋转速度。使用计时器,或基于时间的值插值。