[英]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);
兩件事情:
每當使用顏色而不是紋理進行繪制時,請確保通過調用glDisable(GL_TEXTURE_2D);
禁用GL_TEXTURE_2D
glDisable(GL_TEXTURE_2D);
在渲染調用之前(在您的情況下,在case MENU:
之前)。 但是不要忘記在完成並准備再次繪制紋理后立即再次啟用它(在您的情況下,請在glRectf()
之后調用glEnable(GL_TEXTURE_2D);
)。 這可能不是您遇到問題的原因,但是稍后將成為問題。
之所以使一切變為紅色的原因是因為每當渲染紋理時, 當前綁定的顏色都會影響從紋理渲染的顏色分量 。 在您繪制紋理中的每個像素由3個或4個值。 紅 , 綠 , 藍和可能的alpha通道。 由於將顏色綁定為紅色,並且在繪制紋理之前不會更改顏色,因此OpenGL僅繪制紋理中每個像素的紅色分量。 因此,紅色分量的紋理范圍為0-1,綠色和藍色值將保持恆定0。 要解決此問題,只需調用glColor3f(1, 1, 1);
渲染后為紅色矩形。 這會將渲染顏色重新設置為白色(默認),因此OpenGL將成功繪制紋理像素的所有3種顏色分量。
我希望我已經清楚了,這會有所幫助。
祝好運! :)
// SK
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.