-1

为什么我的 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 对象会发生变化,但它不会旋转。

4

1 回答 1

0

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

当您在选项卡之间切换时,需要重绘并发生绘制事件。这就是为什么您此时会看到一些变化。

通过减少/最大化您的窗口等,您可能会看到同样的事情......

你应该:

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