Java 6で画像を作成するには、次のコードを持つMacコンピュータを使用します。私はOpenGL ESを使ってAndroidデバイスにその画像を表示しようとします。画像が表示されず、白い画像のみが表示されます。ただし、半透明のピクセルがない場合、画像はきれいに表示されます。Javaで作成された半透明または透明の画像がAndroid OpenGL ESに表示されない
Photoshopで作成された半透明のイメージを表示するのに問題はありません。 Javaで作成された半透明の画像だけで問題があります。また、Javaで半透明の画像を作成するさまざまな方法を試しましたが、私は常にOpenGLで表示される白い画像と同じ結果を得ています。この時点では、これはJavaのバグだと思う(Macコンピュータの場合)。誰もこれのようなものに遭遇したことがありますか?なぜこれが起こっているかもしれないのか?画像の下
int cmap[] = {
0x00000000, /*transparent*/
0xFF000000, /*black*/
0xFFFF0000, /*red*/
0xFFFFFF00, /*yellow*/
0xFF00FF00, /*green*/
//......
};
IndexColorModel colorModel = new IndexColorModel(8,
cmap.length, cmap, 0, true, -1, DataBuffer.TYPE_BYTE);
BufferedImage image = new BufferedImage(256, 256,
BufferedImage.TYPE_BYTE_INDEXED, colorModel);
Graphics2D g = image.createGraphics();
g.setBackground(new Color(0,0,0,0)); /*transparent*/
g.clearRect(0 , 0, image.getWidth(), image.getHeight());
g.setColor(Color.red);
g.draw(new Rectangle(10, 10, 40, 40));
ImageIO.write(image, "PNG", new File("rectangle.png"));
を作成するため
//コードは、テクスチャをロードするためのコードです。これはAndroid環境に固有のものです。
public static void loadAndBindTexture(GL10 gl) throws Exception
{
int numberTextures=1;
int[] textures = new int[numberTextures];
gl.glGenTextures(numberTextures, textures, 0);
int textureID=textures[0];
gl.glBindTexture(GL10.GL_TEXTURE_2D, textureID);//polyBreaker3DObject_.mTextureID);
checkGLError(gl, 998);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR_MIPMAP_LINEAR);
checkGLError(gl, 997);
//NOTE: FOR GL_TEXTURE_MAG_FILTER only GL_NEAREST or GL_LINEAR are valid.
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
checkGLError(gl, 996);
/*Commented on Sept. 30, 2010 6:21AM
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER,GL10.GL_NEAREST);
gl.glTexParameterf(GL10.GL_TEXTURE_2D,GL10.GL_TEXTURE_MAG_FILTER,GL10.GL_LINEAR);
*/
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S,GL10.GL_CLAMP_TO_EDGE);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T,GL10.GL_CLAMP_TO_EDGE);
checkGLError(gl, 1000);
gl.glTexEnvf(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE,GL10.GL_DECAL);
checkGLError(gl, 1001);
gl.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_GENERATE_MIPMAP, GL11.GL_TRUE);
checkGLError(gl, 1002);
if(mContext==null)//mContext is the Context of the current Android application (it is set before this method is called
throw new Exception("Context has not been set.");
InputStream is = mContext.getResources().openRawResource(R.drawable.metal128x128);//blueski);//robot);
Bitmap bitmap;
try {
bitmap = BitmapFactory.decodeStream(is);
} finally {
try {
is.close();
} catch(IOException e) {
Log.printCaughtExceptionMsg(e);
}
}
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
bitmap.recycle();
checkGLError(gl, 1003);
}
イメージを読み込んでテクスチャを作成するために使用するコードを表示できますか?特にglTexImage2Dコール – haffax