gpt4 book ai didi

java - LWJGL - 文本颜色改变背景颜色

转载 作者:行者123 更新时间:2023-12-01 23:46:11 25 4
gpt4 key购买 nike

我的 LWJGL 程序存在严重问题。如果我设置其中一种文本的颜色,背景的颜色也会改变。
我想我知道为什么,我只是将所有绘图内容放入无限循环中,也许这就是原因。 你能帮我解决这个问题吗?我对问题原因的理解正确吗?如果是,我该如何解决?如果不是,你觉得怎么样,问题出在哪里?这是我的代码:
主类:

<!-- language: lang-java -->
public class DoomMain {
public static final int WIDTH = 640;
public static final int HEIGHT = 480;
public static final int SCALE = 1;

private static State state;

public DoomMain() {
try {
Display.setDisplayMode(new DisplayMode(WIDTH*SCALE,HEIGHT*SCALE));
Display.setTitle("Tomco - Doom");
Display.create();
} catch(LWJGLException e) {
e.printStackTrace();
}

while(!Display.isCloseRequested()) {
state = State.MENU;

switch(state) {
case INTRO:
new Intro();
break;
case MENU:
new MainMenu();
break;
case CREDITS:
break;
case GAME:
break;
default:
break;
}

Display.update();
Display.sync(60);
}

Display.destroy();
}


public static void main(String[] args) {
new DoomMain();
}
}

MainMenu 类:

<!-- language: lang-java -->
public class MainMenu {

private Texture background;
private TrueTypeFont doomfont;

private boolean ana = false;

public MainMenu() {
glClear(GL_COLOR_BUFFER_BIT);
glEnable(GL_TEXTURE_2D);
glClearColor(0.0f,0.0f,0.0f,0.0f);
glEnable(GL11.GL_BLEND);
glBlendFunc(GL11.GL_SRC_ALPHA,GL11.GL_ONE_MINUS_SRC_ALPHA);
glViewport(0,0,DoomMain.WIDTH,DoomMain.HEIGHT);
glMatrixMode(GL11.GL_MODELVIEW);
glMatrixMode(GL11.GL_PROJECTION);
glLoadIdentity();
glOrtho(0,DoomMain.WIDTH,DoomMain.HEIGHT,0,1,-1);
glMatrixMode(GL11.GL_MODELVIEW);
glShadeModel(GL_SMOOTH);

drawBackground();
drawText();
glDisable(GL_TEXTURE_2D);
}

private void drawBackground() {
try {
background = TextureLoader.getTexture("PNG",new FileInputStream(new File("res/textures/mainmenu/doom_00340461.png")));
} catch (FileNotFoundException e) {
e.printStackTrace();
Display.destroy();
} catch (IOException e) {
e.printStackTrace();
Display.destroy();
}

glBegin(GL_QUADS);
{
glTexCoord2f(0,0);
glVertex2f(0,0);
glTexCoord2f(1,0);
glVertex2f(background.getTextureWidth(),0);
glTexCoord2f(1,1);
glVertex2f(background.getTextureWidth(),background.getTextureHeight());
glTexCoord2f(0,1);
glVertex2f(0,background.getTextureHeight());
}
glEnd();
}

private void drawText() {
Color.white.bind();
try {
InputStream inputStream = ResourceLoader.getResourceAsStream("res/fonts/DooM.ttf");
Font awtFont = Font.createFont(Font.TRUETYPE_FONT,inputStream);
awtFont = awtFont.deriveFont(24f);
doomfont = new TrueTypeFont(awtFont,ana);
} catch(Exception e) {
e.printStackTrace();
}

doomfont.drawString(200,100,"Start new game",Color.red);
}
}

最佳答案

默认情况下,纹理将乘以当前颜色。作为状态机,“当前颜色”是您最后设置的颜色。就您而言,当您绘制文本时;当您再次进入循环时,纹理将使用相同的颜色。

为了简化问题,您可以将整个drawText例程简化为仅设置颜色:

LOOP:
a) draw background
b) set color

结果:...设置颜色;绘制背景...

glClear 函数清除缓冲区中已绘制的内容,但不会清除接下来要使用的颜色。

作为解决方案,您可以在绘制纹理之前显式更改颜色。 glColor3f(1.0f, 1.0f, 1.0f) 将按原样生成纹理,任何其他值都将用作颜色滤镜(就像现在一样)。

另一个解决方案是使用 glTexEnv 更改纹理绘制行为。假设纹理是 GL_RGBA,则调用 glTexEnv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE) 有效。链接页面包含一个表格,其中包含不同的设置及其效果。

关于java - LWJGL - 文本颜色改变背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17013216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com