您的位置:首页 > 运维架构

OpenGL png图片 纹理贴图,去除png图片黑边

2010-11-16 11:19 621 查看
将png图片作为纹理贴图,在图片周围会产生黑边,在网上查了一下,都没有明确指出解决方法!废话不说了,看代码。

1.初始化

protected void init(GL10 gl) {
// Setup background color
gl.glClearColor(1, 1, 1, 1);
gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);

glEnable(GL_DEPTH_TEST);
glEnable(GL10.GL_ALPHA_TEST);  // Enable Alpha Testing (To Make BlackTansparent)

glAlphaFunc(GL10.GL_GREATER,0.1f);  // Set Alpha Testing (To Make Black Transparent)

// Setup project matrix
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
GLU.gluOrtho2D(gl, 0.0f,1.3f,0.0f,1.0f);
gl.glEnable(GL10.GL_TEXTURE_2D);
gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, texBuff);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

tex = loadTexture(gl, bmp);

// Smooth shading

gl.glShadeModel(GL10.GL_SMOOTH);
}


2.加载纹理贴图

protected static int loadTexture(GL10 gl, Bitmap bmp, boolean reverseRGB) {
int[] textures = new int[1];
glGenTextures(1, textures, 0);
int mTextureID = textures[0];
glBindTexture(GL_TEXTURE_2D, mTextureID);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_NEAREST);

glTexParameterf(GL_TEXTURE_2D,
GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S,
GL_CLAMP_TO_EDGE);

glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T,
GL_CLAMP_TO_EDGE);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE,
GL_REPLACE);
GLUtils.texImage2D(GL_TEXTURE_2D, 0, bmp, 0);

bmp.recycle();

return mTextureID;
}


3.效果图

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: