Java 混合纹理显示精细,但普通颜色的形状不显示

Java 混合纹理显示精细,但普通颜色的形状不显示,java,opengl,lwjgl,Java,Opengl,Lwjgl,由于某些原因,启用alpha混合会导致我无法绘制普通彩色形状。一切事物的绘制顺序没有区别。即使只画彩色的形状,也不会显示出来 禁用alpha混合可以修复此问题,但禁用alpha混合(显然)。这让我相信问题在于如何初始化openGL 纹理对象包含在世界中,并被注释掉。注释“world.run();”没有区别,只有禁用alpha混合才有区别 public class Core { int width=800, height=600; //World world; public void Sta

由于某些原因,启用alpha混合会导致我无法绘制普通彩色形状。一切事物的绘制顺序没有区别。即使只画彩色的形状,也不会显示出来

禁用alpha混合可以修复此问题,但禁用alpha混合(显然)。这让我相信问题在于如何初始化openGL

纹理对象包含在世界中,并被注释掉。注释“world.run();”没有区别,只有禁用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的构造函数正在加载(但未绘制)纹理。删除该部分代码可以显示彩色方块。我推断,只要加载纹理,不管它是否显示,问题就会发生。

您在
initGL
中获得了
glEnable(GL\u texture\u 2D)
,但我没有看到它在任何地方被禁用


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

禁用深度测试怎么样?我知道它是2D的,但它可能仍然很重要。你是怎么做到的?对不起,我对这个有点陌生。
GL11.glDisable(GL11.GL\u DEPTH\u TEST)。但是默认情况下它是禁用的。我看不出这段代码中有任何错误可以解释您描述的行为。你能举个简单的例子吗?(这样做时,您自己可能会发现问题!)重叠的两个半透明对象会做什么?我不知道。有没有办法同时处理纹理对象和未纹理对象?或者说,使用有纹理的单色对象是唯一的方法吗?@BabarShariff:颜色乘以纹理,这样你就可以在图集中有一点纯白纹理,用于纯色形状。