[英]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.