簡體   English   中英

LWJGL在紋理上繪制矩形

[英]LWJGL draw rect over texture

我使用以下內容繪制紋理四邊形

tex.bind();
    glTranslatef(x, y, 0);
    glBegin(GL_QUADS);
    glTexCoord2f(0, 0);
    glVertex2f(0, 0);

    glTexCoord2f(1, 0);
    glVertex2f(width, 0);

    glTexCoord2f(1, 1);
    glVertex2f(width, height);

    glTexCoord2f(0, 1);
    glVertex2f(0, height);

    glEnd();
    glLoadIdentity();

這些配置:

try {
        Display.setDisplayMode(new DisplayMode(WIDTH, HEIGHT));
        Display.create();

    } catch (LWJGLException e) {
        e.printStackTrace();
    }
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, WIDTH, HEIGHT, 0, 1, -1);
    glMatrixMode(GL_MODELVIEW);
    GL11.glEnable(GL11.GL_TEXTURE_2D);
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    GL11.glDisable(GL11.GL_DEPTH_TEST);
    GL11.glDisable(GL11.GL_LIGHTING);
    GL11.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
    GL11.glClearDepth(1);

但是現在我想通過在屏幕上繪制一個矩形來向游戲添加菜單,但是當我這樣做時,一切都會變成紅色(如果我將紅色設置為顏色)

    case MENU:
    GL11.glColor3f(1.0f, 0.0f, 0.0f);
    glRectf(50, 50, 50, 50);

兩件事情:

  1. 每當使用顏色而不是紋理進行繪制時,請確保通過調用glDisable(GL_TEXTURE_2D);禁用GL_TEXTURE_2D glDisable(GL_TEXTURE_2D); 在渲染調用之前(在您的情況下,在case MENU:之前)。 但是不要忘記在完成並准備再次繪制紋理后立即再次啟用它(在您的情況下,請在glRectf()之后調用glEnable(GL_TEXTURE_2D); )。 這可能不是您遇到問題的原因,但是稍后將成為問題。

  2. 之所以使一切變為紅色的原因是因為每當渲染紋理時, 當前綁定的顏色都會影響從紋理渲染的顏色分量 在您繪制紋理中的每個像素由3個或4個值。 和可能的alpha通道。 由於將顏色綁定為紅色,並且在繪制紋理之前不會更改顏色,因此OpenGL僅繪制紋理中每個像素的紅色分量。 因此,紅色分量的紋理范圍為0-1,綠色和藍色值將保持恆定0。 要解決此問題,只需調用glColor3f(1, 1, 1); 渲染后為紅色矩形。 這會將渲染顏色重新設置為白色(默認),因此OpenGL將成功繪制紋理像素的所有3種顏色分量。

我希望我已經清楚了,這會有所幫助。

祝好運! :)

// SK

暫無
暫無

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

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