出于某种原因,启用alpha混合会导致我无法绘制普通的彩色形状。绘制所有内容的顺序没有区别。即使绘制的唯一内容是彩色形状,它仍然不会显示。
禁用Alpha混合会修复此问题,但会禁用Alpha混合(显然)。这让我相信问题在于我如何初始化openGL。
纹理对象包含在世界中,已注释掉。评论“world.run();” out没有区别,只能禁用alpha混合。
public class Core {
int width=800, height=600;
//World world;
public void Start(){
try {
Display.setDisplayMode(new DisplayMode(width,height));
Display.create();
} catch (LWJGLException e) {
e.printStackTrace();
System.exit(0);
}
initGL();
System.out.println("OpenGL version: " + GL11.glGetString(GL11.GL_VERSION));
boolean Close = Display.isCloseRequested();
//world = new World(width, height);
while(!Close){
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
if(Keyboard.isKeyDown(Keyboard.KEY_ESCAPE) || Display.isCloseRequested())
Close = true;
//world.run();
GL11.glColor4d(1, 0, 0, 1);
GL11.glBegin(GL11.GL_QUADS);
GL11.glVertex2d(0, 0);
GL11.glVertex2d(0, 50);
GL11.glVertex2d(50, 50);
GL11.glVertex2d(50, 0);
GL11.glEnd();
Display.update();
//Display.sync(60);
}
}
public void initGL(){
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
// enable alpha blending
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glViewport(0,0,width,height);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glOrtho(0, width, height, 0, 1, -1);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
}
public static void main(String args[]){
Core m = new Core();
m.Start();
}
}
这是一个2D应用程序,我试图在黑白世界地图的纹理背后绘制元球。
普通的彩色形状指的是以下内容,
GL11.glColor4d(1, 0, 0, 1);
GL11.glBegin(GL11.GL_QUADS);
GL11.glVertex2d(0, 0);
GL11.glVertex2d(0, 50);
GL11.glVertex2d(50, 50);
GL11.glVertex2d(50, 0);
GL11.glEnd();
即使单独绘制,只要启用了Alpha混合,它就不会显示。
更新: world 的构造函数正在加载(但不是绘制)纹理。删除该部分代码可以显示彩色方块。我推断,只要加载纹理,无论是否显示,都会出现问题。
答案 0 :(得分:1)
glEnable(GL_TEXTURE_2D)
中有initGL
,但我认为它在任何地方都没有停用。
如果你想绘制一个无纹理的对象,你知道你必须禁用纹理吗?对不起?