簡體   English   中英

縱橫比拉伸的OpenGL 2D投影

[英]OpenGL 2D projection stretched by aspect ratio

我目前正在嘗試使用JOGL將我的2D Java游戲的繪制方法轉換為OpenGL,因為原生Java對於快速連續繪制高分辨率圖像來說似乎很慢。 現在我想使用16:9的寬高比,但是問題是我的圖像被拉伸到了側面。 目前我只畫一個白色的旋轉四邊形來測試:

public void resize(GLAutoDrawable d, int width, int height) {

    GL2 gl = d.getGL().getGL2(); // get the OpenGL 2 graphics context
    gl.glViewport(0, 0, width, height);
    gl.glMatrixMode(GL2.GL_PROJECTION);
    gl.glOrtho(-1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f);

}

public void display(GLAutoDrawable d) {

    GL2 gl = d.getGL().getGL2();  // get the OpenGL 2 graphics context
    gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
    gl.glClear(GL.GL_COLOR_BUFFER_BIT);

    gl.glMatrixMode(GL2.GL_MODELVIEW);
    gl.glLoadIdentity();
    gl.glColor3f(1.0f,1.0f,1.0f);

    degree += 0.1f;

    gl.glRotatef(degree, 0.0f, 0.0f, 1.0f);

    gl.glBegin(GL2.GL_QUADS);
    gl.glVertex2f(-0.25f, 0.25f);
    gl.glVertex2f(0.25f, 0.25f);
    gl.glVertex2f(0.25f, -0.25f);
    gl.glVertex2f(-0.25f, -0.25f);
    gl.glEnd();

    gl.glRotatef(-degree, 0.0f, 0.0f, 1.0f);

    gl.glFlush();
}

我知道您可以通過使用glOrtho()以某種方式解決此問題,並且我現在為此嘗試了許多不同的值,但沒有一個獲得未拉伸的圖像。 我該如何使用呢? 還是為此提供另一種簡單的解決方案?

投影矩陣將所有頂點數據從眼睛坐標轉換為剪輯坐標。

然后,通過將片段坐標的w分量除以將這些片段坐標也轉換為歸一化設備坐標(NDC)。 歸一化的設備坐標在(-1, -1, -1)(1, 1, 1) (-1, -1, -1)范圍內。

通過正交投影,眼睛空間坐標線性映射到NDC。

如果視口是矩形的,則必須通過映射坐標來考慮。

float aspect = (float)width/height;
gl.glOrtho(-aspect, aspect, -1.0f, 1.0f, -1.0f, 1.0f);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM