代码之家  ›  专栏  ›  技术社区  ›  Manuel Selva

窗口中心的Opengl绘图

  •  2
  • Manuel Selva  · 技术社区  · 14 年前

    我开始处理OpenGL。我的应用程序是用Java编写的,使用SWT作为窗口系统。

    使用 http://lwjgl.org/

    // clear to background color
    GL11.glClearColor(.3f, .5f, .8f, 1.0f);
    GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);
    
    // draw rectangle
    GL11.glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
    GL11.glMatrixMode(GL11.GL_PROJECTION);
    GL11.glLoadIdentity();
    GL11.glBegin(GL11.GL_POLYGON);
    GL11.glVertex3f(0.1f, 0.1f, 0.0f);
    GL11.glVertex3f(0.1f, 0.9f, 0.0f);
    GL11.glVertex3f(0.9f, 0.9f, 0.0f);
    GL11.glVertex3f(0.9f, 0.1f, 0.0f);
    GL11.glEnd();
    GL11.glFlush();
    

    我想知道如何在画布上添加一个调整大小的侦听器,以便始终将我的矩形放在窗口的中心。我该怎么做?

    1 回复  |  直到 9 年前
        1
  •  4
  •   Ivan Baldin    14 年前

    您需要通过调用 glViewport() glOrtho() .

    // Viewport (needs to be done on canvas resize only)
    GL11.glViewport(0.0, 0.0,                   // Set viewport size
                    canvas.getBounds().width,
                    canvas.getBounds().height);
    
    // Projection (only needs to be set once in most cases)
    GL11.glMatrixMode(GL11.GL_PROJECTION);        // Select projection matrix
    GL11.glLoadIdentity();                        // Clear it
    GL11.glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);  // Set your projection
    
    // model/view transforms
    GL11.glMatrixMode(GL11.GL_MODELVIEW);  // Select modelview matrix
    GL11.glLoadIdentity();                 // Clear it
    
    // Draw (shortcut)
    GL11.glRectf(0.1f, 0.1f, 0.9f, 0.9f);