簡體   English   中英

繪制紋理四邊形OpenGL無法正常工作

[英]Drawing textured quads OpenGL not working

我正在嘗試渲染一組紋理四邊形。

我可以渲染彩色的四邊形,但不能渲染紋理的四邊形(屏幕顯示為空。)

我正在使用LWJGL和PNGDecoder。

初始化我的OGL的代碼:

GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glOrtho(0, 800, 0, 600, 1, -1);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glEnable(GL11.GL_TEXTURE_2D);

用於解碼我的圖像的代碼:

ByteBuffer buffer = null;
InputStream in = ClassLoader.getSystemResourceAsStream(filename);
try {
    buffer = decodeStreamToBuffer(in);
} finally {
    in.close();
}
return buffer;

我的decodeStreamToBuffer(InputStream in)

PNGDecoder decoder;
ByteBuffer buf = null;
try {
    decoder = new PNGDecoder(in);

    buf = ByteBuffer.allocateDirect(4*decoder.getWidth()*decoder.getHeight());
    decoder.decode(buf, decoder.getWidth()*4, Format.RGBA);
    buf.flip();
} catch (Exception e) {
    e.printStackTrace();
}

return buf;

我的渲染代碼:

    GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
    GL11.glColor3f(0.5f, 0.5f, 1.0f); //Still there to test color quads.

    // draw quad
    GL11.glPushMatrix();
        GL11.glTranslatef(screencenter.getX(), screencenter.getY(), 0);
        GL11.glScalef(1f, 0.5f, 1f);
        GL11.glRotatef(camRotation, 0f, 0f, 1f);
        GL11.glTranslatef(-screencenter.getX(), -screencenter.getY(), 0);

        GL11.glBindTexture(GL11.GL_TEXTURE_2D, texture);
        GL11.glBegin(GL11.GL_TEXTURE_2D);

            GL11.glTexCoord2f(0.0f, 0.0f);
            GL11.glVertex2f(0, 0);

            GL11.glTexCoord2f(1.0f, 0.0f);
            GL11.glVertex2f(32, 0);

            GL11.glTexCoord2f(1.0f, 1.0f);
            GL11.glVertex2f(32, 32);

            GL11.glTexCoord2f(0.0f, 1.0f);
            GL11.glVertex2f(0, 32);

        GL11.glEnd();

    GL11.glPopMatrix();

當我保留紋理綁定並將GL_TEXTURE_2D更改為GL_MODELVIEW ,所有方法都可以工作...但是使用顏色而不是紋理。 我在這里犯一個菜鳥錯誤嗎?

這是錯誤的GL11.glBegin(GL11.GL_TEXTURE_2D);

glBegin方法是primitive mode GLenum

因此,您可以使用:

  • GL_POINTS
  • GL_LINES
  • GL_LINE_STRIP
  • GL_LINE_LOOP
  • GL_TRIANGLES
  • GL_TRIANGLE_STRIP
  • GL_TRIANGLE_FAN
  • GL_QUADS
  • GL_QUAD_STRIP
  • GL_POLYGON

您使用的模式指定要渲染的內容。 在您的情況下,您將編寫GL_QUADS代碼,因此,要修復代碼,您需要替換GL11.glBegin(GL11.GL_TEXTURE_2D); GL11.glBegin(GL11.GL_QUADS);

額外

還請記住, glVertexglNormalglTexCoord等是不推薦使用的方法,不應使用。 您應該使用VBO和着色器。 盡管如果您正在學習OpenGL,則請繼續使用不推薦使用的方法,因為它們在學習時很好且易於使用!

暫無
暫無

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

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