何らかの理由で、アルファブレンディングを有効にすると、ありふれた色の図形を描画できなくなります。すべてが描画される順序に違いはありません。描画されているのが色付きの形状だけであっても、それは表示されません。
アルファ ブレンディングを無効にすると、これは修正されますが、アルファ ブレンディングは無効になります (当然のことです)。これにより、openGL の初期化方法に問題があると思われます。
テクスチャ オブジェクトはワールドに含まれており、コメント アウトされています。「world.run();」にコメントする アルファブレンディングを無効にするだけで違いはありません。
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();
単体で描いても、アルファブレンディングが有効になっている限りは表示されません。
更新: worldのコンストラクターがテクスチャをロードしていました (ただし描画はしていません)。コードのその部分を削除すると、色付きの四角形が表示されます。テクスチャが表示されているかどうかに関係なく、テクスチャがロードされている限り、問題が発生すると推測しました。