Java 混合纹理显示精细,但普通颜色的形状不显示
由于某些原因,启用alpha混合会导致我无法绘制普通彩色形状。一切事物的绘制顺序没有区别。即使只画彩色的形状,也不会显示出来 禁用alpha混合可以修复此问题,但禁用alpha混合(显然)。这让我相信问题在于如何初始化openGL 纹理对象包含在世界中,并被注释掉。注释“world.run();”没有区别,只有禁用alpha混合才有区别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
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:颜色乘以纹理,这样你就可以在图集中有一点纯白纹理,用于纯色形状。