我有一个问题,我使用的任何纹理的颜色都会被漂白,如果这是一个很好的词来用来描述它,在两个不同的手机上,但纹理在模拟器上显示得很好。
Here are the images. 第一个图像是我正在使用的纹理。 第二个图像是纹理在模拟器上显示的方式以及它应该显示在手机上的方式。 第三个图像是纹理实际显示在手机上的方式。
我应该在绘制矩形的位置包含代码吗?矩形只是一个顶点缓冲区和texcoord缓冲区。实际上用纹理完成的任何事情都是gl.glBindTexture和gl.glBlendFunction(GL10.GL_ONE,GL10.GL_ONE_MINUS_SRC_ALPHA)。 gl.glColor4f(1.0f,1.0f,1.0f,1.0f)也被调用。
以下代码是我认为我的错误可能存在的地方。我希望有人可以帮助我。谢谢!
这是我的GLSurfaceView.Renderer实现
@Override
public void onSurfaceCreated(final GL10 gl, final EGLConfig config) {
DebugLog.d("onSurfaceCreated");
gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_FASTEST);
gl.glShadeModel(GL10.GL_FLAT);
gl.glDisable(GL10.GL_DEPTH_TEST);
gl.glDisable(GL10.GL_DITHER);
gl.glDisable(GL10.GL_LIGHTING);
gl.glDisable(GL10.GL_MULTISAMPLE);
gl.glEnable(GL10.GL_BLEND);
gl.glEnable(GL10.GL_CULL_FACE);
gl.glEnable(GL10.GL_TEXTURE_2D);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glFrontFace(GL10.GL_CW);
gl.glCullFace(GL10.GL_BACK);
}
这是我的BitmapTexture类。
@Override
public void loadBitmapToHardware(final GL10 gl) throws IOException {
final Bitmap bitmap = loadBitmap();
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, GL10.GL_RGBA, bitmap, GL10.GL_UNSIGNED_BYTE, 0);
bitmap.recycle();
}
@Override
public Bitmap loadBitmap() {
InputStream is = null;
try {
is = mContext.getAssets().open(mBitmapPath);
return BitmapFactory.decodeStream(is);
} catch (final IOException e) {
DebugLog.e("Failed to load Bitmap in " + this.getClass().getSimpleName() + " from path: " + mBitmapPath, e);
return null;
} finally {
try {
is.close();
} catch (final IOException e) {
e.printStackTrace();
}
}
}
@Override
public void loadTexture() throws IOException {
gl.glGenTextures(1, TEXTURE_CONTAINER, 0);
mTextureId = TEXTURE_CONTAINER[0];
gl.glBindTexture(GL10.GL_TEXTURE_2D, mTextureId);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
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);
gl.glTexEnvf(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE, GL10.GL_MODULATE);
loadBitmapToHardware();
}
答案 0 :(得分:0)
对我来说,这似乎是一个过度曝光的问题。模拟器和手机的屏幕设置可能会以不同方式处理此问题,尤其是在代码中禁用了抖动。
你应该尝试:
1:删除glColor4f()调用,看看是否有效(根据我所知的GL10,它会在你的情况下将颜色设置为白色,这可能会导致混合问题)。
或
2:转动混合并打开深度测试,看看你的混合是否给出了这个结果。