混合纹理显示很好,但普通的彩色形状不会

时间:2012-11-24 21:37:13

标签: java opengl lwjgl

出于某种原因,启用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 的构造函数正在加载(但不是绘制)纹理。删除该部分代码可以显示彩色方块。我推断,只要加载纹理,无论是否显示,都会出现问题。

1 个答案:

答案 0 :(得分:1)

glEnable(GL_TEXTURE_2D)中有initGL,但我认为它在任何地方都没有停用。

如果你想绘制一个无纹理的对象,你知道你必须禁用纹理吗?对不起?