我想将Alpha / Blend模式用于未来的东西(主要是交易和可能的图像混合)。
好吧,我无法使用LWJGL(GL1.1)让它工作,我已经尝试了其他混合模式,但没有工作,也没有改变背景或类似的东西......
在所有这些测试中,无论是否有alpha参数,结果都是相同的
` private void init() {
try {
Display.setDisplayMode(new DisplayMode(DEFAULT_WIDTH, DEFAULT_HEIGHT));
Display.setResizable(true);
Display.setVSyncEnabled(true);
Display.setTitle(DEFAULT_TITLE + " v" + VERSION);
Display.create();
updateMatrix();
} catch(LWJGLException e) {
e.printStackTrace();
}
Keyboard.enableRepeatEvents(true);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
Font consolas = new Font("consolas", Font.PLAIN, 13);
font = new TrueTypeFont(consolas, antiAliasedFont);
}
private void updateMatrix() {
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, DEFAULT_WIDTH, DEFAULT_HEIGHT, 0, 1, -1);
//glScaled((double) DEFAULT_WIDTH / (double) Display.getWidth(), (double) DEFAULT_HEIGHT / (double) Display.getHeight(), 0);
glViewport(0, 0, Display.getWidth(), Display.getHeight());
glMatrixMode(GL_MODELVIEW);
}
@Override
public void run() {
init();
Main main = Main.getMain();
while(!Display.isCloseRequested()) {
currentGraphicsTick++;
{
glClear(GL_COLOR_BUFFER_BIT);
glClearColor(0f, 0f, 0f, 1f);
if(Display.wasResized()) updateMatrix();
if(vsyncMode == 1) Display.setVSyncEnabled(true);
else if(vsyncMode == 2) Display.setVSyncEnabled(false);
if(Display.isActive()) {
glPushMatrix();
try { // Draw
float alpha = (float) Math.cos(Math.toRadians(currentGraphicsTick % 90));
System.out.println("Alpha: " + alpha);
glBegin(GL_LINE_STRIP);
{
float sin = (float) Math.abs(Math.sin(Math.toRadians(currentGraphicsTick % 360)));
new Color(0.7f, 0.7f, 0.7f, alpha).bind();
glVertex2f(DEFAULT_WIDTH * 0.03f, DEFAULT_HEIGHT * 0.05f);
glVertex2f(DEFAULT_WIDTH * 0.93f * sin, DEFAULT_HEIGHT * 0.95f * sin);
}
glEnd();
glBegin(GL_QUAD_STRIP);
{
new Color(0.5f, 0.5f, 0.5f, alpha).bind();
glVertex2i(0, 0);
glVertex2i(0, DEFAULT_HEIGHT);
glVertex2i(DEFAULT_WIDTH, 0);
glVertex2i(DEFAULT_WIDTH, DEFAULT_HEIGHT);
}
glEnd();
String[] split = main.getGameLoopThread().getDebugString().split("\n");
for(int i = 0; i < split.length; i++) {
font.drawString(1, 1 + (i * font.getLineHeight()), split[i], Color.white);
}
} catch(Throwable throwable) {
throwable.printStackTrace();
}
glPopMatrix();
}
Display.update();
Display.sync(TARGET_FPS);
}
}
Display.destroy();
closeRequested = true;
}
一方面,它从(0,0)移动到(宽度 - 7%,高度 - 5%)
另一方面,它仍停留在(宽度+ 3%,高度+ 5%)
矩形会让它淡出(最初的想法会使用与背景相同的颜色,但它没有在我的测试中,因为我想看到矩形)
答案 0 :(得分:0)
在使用我自己的引擎进行2D游戏时,我有类似的(就我必须解决的问题而言)。 LWJGL的混合功能总是有一些问题,并没有真正为它们提供许多具体的答案,因为它真的归结为你的代码以及你如何放置东西。
我认为你正在使用SlickUtil,我会说你自己编写(或者当然是搜索)你自己的方法。 Util的方法总是有些混乱。
就像我说的那样,这个错误/问题可能是由于我可以用你发布的内容指出的一些东西。
我的建议是:
抱歉,我无法提供太多帮助,但是从您发布的混乱代码中追踪您的问题有点困难。我将密切关注这个问题,以防我将来有所帮助。
答案 1 :(得分:0)
除了来自@Juxhin的提示之外,解决我的alpha混合问题的是来自SlickUtils的 TextureImpl.bindNone(); (检查openGL&#39; s类似于下面)
此方法类似于 glDisable(GL_TEXTURE_2D),然后渲染需要混淆的东西(我知道搜索和检查Slick的源代码) < / p>