如何解决android texture2D导致3d色彩丢失
| 我试图绘制一个3d对象,然后在屏幕上绘制一个2d纹理。使用onSurfaceCreated(GL10 gl)的此函数创建纹理:public static int loadText(GL10 gl,float width,float height,String text) {
gl.glGenTextures(1,mTextureNameWorkspace,0);
textureName = mTextureNameWorkspace[0];
gl.glBindTexture(GL10.GL_TEXTURE_2D,textureName);
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);
gl.glTexEnvf(GL10.GL_TEXTURE_ENV,GL10.GL_TEXTURE_ENV_MODE,GL10.GL_REPLACE);
bitmap = Bitmap.createBitmap((int) width,(int) height,Bitmap.Config.ARGB_4444);
canvas = new Canvas(bitmap);
canvas.drawText(text,width / 2,50,paint);
glutils.texImage2D(GL10.GL_TEXTURE_2D,bitmap,0);
mCropWorkspace[0] = 0;
mCropWorkspace[1] = bitmap.getHeight();
mCropWorkspace[2] = bitmap.getWidth();
mCropWorkspace[3] = -bitmap.getHeight();
bitmap.recycle();
((GL11) gl).glTexParameteriv(GL10.GL_TEXTURE_2D,GL11Ext.GL_TEXTURE_CROP_RECT_OES,mCropWorkspace,0);
return textureName;
}
问题是如果我在不调用此框架的情况下绘制框架,则3d对象为橙色,但显然2d纹理未绘制。但是,如果我在调用此框后绘制了框架,则3d对象将变为黑色。 im用于绘图的代码:
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.gldisable(GL10.GL_BLEND);
gl.glShadeModel(GL10.GL_SMOOTH);
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glLoadIdentity();
gl.glEnable(GL10.GL_DEPTH_TEST);
gl.glLoadIdentity();
glu.gluPerspective(gl,45.0f,(float) width / (float) height,0.1f,500.0f);
gl.glMatrixMode(GL10.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glTranslatef(4,2,-10);
gl.glrotatef(45,1,0);
car.draw(gl);
解决方法
您没有在任何地方启用纹理单元。进行任何其他与纹理相关的调用之前,请先放置
glEnable(GL_TEXTURE_2D)
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。