JOGL プログラムのテクスチャで問題が発生しました。ディスプレイリストから取得した立方体に描画したテクスチャがちらつきます。ここに問題を示すビデオがあります: http://www.youtube.com/watch?v=nIj3b_Rs7Nw (悪いビデオで申し訳ありません。最初に何が問題だったのかわかりません) 最初に私はそれがアンチエイリアシングの問題ですが、より滑らかなテクスチャを使用しても問題は残ります。次に、テクスチャでミップマッピングを有効にしましたが、うまくいきませんでした。結果は常に同じです。
これは、テクスチャを準備するために最初に使用したコードです。これはミップマッピングなしです。
final int[] tmp = new int[1];
gl.glGenTextures(1, tmp, 0);
id = tmp[0];
BufferedImage bufferedImage = null;
int width = 0;
int height = 0;
try {
bufferedImage = ImageIO.read(new File(filename));
width = bufferedImage.getWidth();
height = bufferedImage.getHeight();
}
catch (IOException e) {
e.printStackTrace();
}
WritableRaster raster = Raster.createInterleavedRaster(DataBuffer.TYPE_BYTE, width, height, 4, null);
ComponentColorModel colorModel = new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB), new int[] {
8, 8, 8, 8 }, true, false, ComponentColorModel.TRANSLUCENT, DataBuffer.TYPE_BYTE);
BufferedImage dukeImg = new BufferedImage(colorModel, raster, false, null);
Graphics2D g = dukeImg.createGraphics();
g.drawImage(bufferedImage, null, null);
DataBufferByte dukeBuf = (DataBufferByte) raster.getDataBuffer();
byte[] dukeRGBA = dukeBuf.getData();
ByteBuffer bb = ByteBuffer.wrap(dukeRGBA);
bb.position(0);
bb.mark();
gl.glBindTexture(GL2.GL_TEXTURE_2D, id);
gl.glPixelStorei(GL2.GL_UNPACK_ALIGNMENT, 1);
gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_WRAP_S, GL2.GL_REPEAT);
gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_WRAP_T, GL2.GL_REPEAT);
gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_NEAREST);
gl.glTexParameteri(GL2.GL_TEXTURE_2D, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_NEAREST);
gl.glTexEnvf(GL2.GL_TEXTURE_ENV, GL2.GL_TEXTURE_ENV_MODE, GL2.GL_REPLACE);
gl.glTexImage2D(GL2.GL_TEXTURE_2D, 0, GL2.GL_RGBA, width, height, 0, GL2.GL_RGBA, GL2.GL_UNSIGNED_BYTE, bb);
...
gl.glBindTexture(GL2.GL_TEXTURE_2D, id);
次に、JOGL テクスチャ クラスのビルドを使用することにしました。setTexParameteri()
この投稿JOGL mipmaps and texture shimmeringから呼び出しましたが、問題は解決しませんでした。
try {
TextureData textureData = TextureIO.newTextureData(drawable.getGLProfile(), new File(
"data/images/Kachel1.png"), true, TextureIO.PNG);
Texture tile = TextureIO.newTexture(textureData);
tile.setTexParameteri(GL2.GL_TEXTURE_WRAP_S, GL2.GL_REPEAT);
tile.setTexParameteri(GL2.GL_TEXTURE_WRAP_T, GL2.GL_REPEAT);
tile.setTexParameteri(GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_NEAREST);
tile.setTexParameteri(GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_LINEAR_MIPMAP_LINEAR);
gl.glGenerateMipmap(GL2.GL_TEXTURE_2D);
}
catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
だから今、ちらつきを取り除くために何をすべきかわかりません。助言がありますか?