2

出于某种原因,启用 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 blending,它就不会显示出来。

更新:世界的构造函数正在加载(但不绘制)纹理。删除那部分代码会让彩色方块出现。我推断只要加载纹理就会出现问题,无论它是否显示。

4

1 回答 1

1

你已经进入glEnable(GL_TEXTURE_2D)initGL,但我没有看到它在任何地方被禁用。

你知道如果你想绘制一个没有纹理的对象,你必须禁用纹理,对吧?

于 2012-11-24T23:27:33.763 回答