現在、私が作成しているテクスチャがスケーリングされたときにブロブとして表示されるJOGLアプリケーションで問題が発生しています。 IDEはNetbeans 6.9.1です。JOGL手続きテクスチャは、スケーリング時にブロブ化されます
テクスチャの作成プロセスについて詳しく説明します。
まず私がやっている: "データ" バイト配列をある
gl.glPixelStorei(gl.GL_UNPACK_ALIGNMENT, 1);
gl.glPixelStorei(gl.GL_PACK_ALIGNMENT, 1);
gl.glPixelStorei(gl.GL_UNPACK_SKIP_PIXELS, 0);
gl.glPixelStorei(gl.GL_UNPACK_SKIP_ROWS, 0);
BufferedImage buff = ByteBuffer_To_BufferedImage(ByteBuffer.wrap(data));
_list_of_textures[count] = TextureIO.newTexture(buff, true);
を...。
私の方法 "ByteBuffer_To_BufferedImage()" 次は行います。基本的にRGBAカラースキームのバイトを注文
int p = _width* _height* 4;
int q; // Index into ByteBuffer
int i = 0; // Index into target int[]
int w3 = _width* 4; // Number of bytes in each row
for (int row = 0; row < _width; row++) {
p -= w3;
q = p;
for (int col = 0; col < _width; col++) {
int iR = data.get(q++)*2; //127*2 ~ 256.
int iG = data.get(q++)*2;
int iB = data.get(q++)*2;
int iA = data.get(q++)*2;
pixelInts[i++] =
((iA & 0x000000FF) << 24) |
((iR & 0x000000FF) << 16) |
((iG & 0x000000FF) << 8) |
(iB & 0x000000FF);
}
}
// Create a new BufferedImage from the pixeldata.
BufferedImage bufferedImage =
new BufferedImage(_width, _height,
BufferedImage.TYPE_INT_ARGB);
bufferedImage.setRGB(0, 0, _width, _height,
pixelInts, 0, _width);
return bufferedImage;
...。私が描くと
、私はそう...
_textures[c].enable();
_textures[c].bind();
gl.glTexEnvi(GL.GL_TEXTURE_ENV, GL.GL_TEXTURE_ENV_MODE, GL.GL_MODULATE);
TextureCoords coords = _textures[c].getImageTexCoords();
gl.glBegin(GL.GL_QUADS);
gl.glTexCoord2f(coords.left(), coords.top());
gl.glVertex3f(...); // Top Left
gl.glTexCoord2f(coords.right(), coords.top());
gl.glVertex3f(...); // Top Right
gl.glTexCoord2f(coords.right(), coords.bottom());
gl.glVertex3f(...); // Bottom Right
gl.glTexCoord2f(coords.left(), coords.bottom());
gl.glVertex3f(...); // Bottom Left
gl.glEnd();
_textures[c].disable();
のようにそれを行うと、それはそれについてです。私はあなたがjavax.media.opengl.GLCapabilitiesで設定できるいくつかのオプションを知っていますが、それが役立つかどうかはわかりません。
誰もこの前にこの動作を見たことがありますか、原因が分かっていますか?また、誰かが私のバイト配列を与えられたテクスチャ作成の代替手段を提案できるなら、私はそれも試してみるでしょう。
編集:
私は戻って、 "Javaのレス" OpenGLを使用してテクスチャを作成してみました。
gl.glGenTextures(1, _textures,layer);
gl.glBindTexture(gl.GL_TEXTURE_2D, _textures[count]);
gl.glTexParameterf(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MIN_FILTER, gl.GL_LINEAR);
gl.glTexParameterf(gl.GL_TEXTURE_2D, gl.GL_TEXTURE_MAG_FILTER, gl.GL_LINEAR);
gl.glTexImage2D(gl.GL_TEXTURE_2D, 0, gl.GL_RGBA,
_width, _height, 0,
GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, ByteBuffer.wrap(data));
この結果、同じ結果が得られます(ピクセルは長方形ではなく矩形です)。
編集:私はバイリニアフィルタリングを問うために私を導く作っ
最後のポストが行われています。これは確かに問題であることが判明しました。
正確なピクセル値を維持する必要がある場合は、GL_NEAREST
(フィルタリング/補間なし)を使用する必要があります。私は前にこの問題に遭遇し、ソリューションをもっと早く覚えていないため、実際には気が気難しいです。
正しい出力はどのように見えますか? – genpfault
ここに出力を修正するためのリンクがあります:http://imageshack.us/photo/my-images/832/specklefix.png/ – viperld002