如何在android中加载GLES中的Multi-texture.obj文件
我必须在android中创建3d obj文件。我已经搜索并找到了许多论坛,现在我能够成功加载obj+mtl文件。但我对obj和mtl文件有很多纹理文件的问题。在可能的情况下,在mtl中,每个面都有一个纹理(.png)。如何在GLES中加载这种类型的obj文件? 是否可以在android Opegls中加载多纹理obj? 我有min3d、3dmodelviewer和arjpct库,但没有任何用处。如果可以加载多纹理对象,请提供帮助 对于multi_纹理,我已经这样做了如何在android中加载GLES中的Multi-texture.obj文件,android,opengl-es-2.0,texture-mapping,render-to-texture,multitexturing,Android,Opengl Es 2.0,Texture Mapping,Render To Texture,Multitexturing,我必须在android中创建3d obj文件。我已经搜索并找到了许多论坛,现在我能够成功加载obj+mtl文件。但我对obj和mtl文件有很多纹理文件的问题。在可能的情况下,在mtl中,每个面都有一个纹理(.png)。如何在GLES中加载这种类型的obj文件? 是否可以在android Opegls中加载多纹理obj? 我有min3d、3dmodelviewer和arjpct库,但没有任何用处。如果可以加载多纹理对象,请提供帮助 对于multi_纹理,我已经这样做了 mTextureHandl
mTextureHandle = setTexture(obj, textureId,GLES20.GL_TEXTURE1);
ByteArrayInputStream textureIs0 = new ByteArrayInputStream(obj.getTextureData().get(0));
int textureId0 = GLUtil.loadTexture(textureIs0);
mTextureHandle = setTexture(obj, textureId0, GLES20.GL_TEXTURE0);
ByteArrayInputStream textureIs2 = new ByteArrayInputStream(obj.getTextureData().get(2));
int textureId2 = GLUtil.loadTexture(textureIs2);
mTextureHandle = setTexture(obj, textureId2, GLES20.GL_TEXTURE2);
ByteArrayInputStream textureIs3 = new ByteArrayInputStream(obj.getTextureData().get(3));
int textureId3 = GLUtil.loadTexture(textureIs3);
mTextureHandle = setTexture(obj, textureId3, GLES20.GL_TEXTURE3);
ByteArrayInputStream textureIs4 = new ByteArrayInputStream(obj.getTextureData().get(4));
int textureId4 = GLUtil.loadTexture(textureIs4);
mTextureHandle = setTexture(obj, textureId2, GLES20.GL_TEXTURE4);
ByteArrayInputStream textureIs5 = new ByteArrayInputStream(obj.getTextureData().get(5));
int textureId5 = GLUtil.loadTexture(textureIs5);
mTextureHandle = setTexture(obj, textureId5, GLES20.GL_TEXTURE5);
ByteArrayInputStream textureIs6 = new ByteArrayInputStream(obj.getTextureData().get(6));
int textureId6 = GLUtil.loadTexture(textureIs6);
mTextureHandle = setTexture(obj, textureId6, GLES20.GL_TEXTURE6);
ByteArrayInputStream textureIs7 = new ByteArrayInputStream(obj.getTextureData().get(7));
int textureId7 = GLUtil.loadTexture(textureIs7);
mTextureHandle = setTexture(obj, textureId7, GLES20.GL_TEXTURE7);
ByteArrayInputStream textureIs8 = new ByteArrayInputStream(obj.getTextureData().get(8));
int textureId8 = GLUtil.loadTexture(textureIs8);
mTextureHandle = setTexture(obj, textureId8, GLES20.GL_TEXTURE8);
ByteArrayInputStream textureIs9 = new ByteArrayInputStream(obj.getTextureData().get(9));
int textureId9 = GLUtil.loadTexture(textureIs9);
mTextureHandle = setTexture(obj, textureId9, GLES20.GL_TEXTURE9);
公共静态int-loadTexture(最终输入流为){
Log.v(“GLUtil”,“从流加载纹理…”);
最终整数[]纹理句柄=新整数[1];
GLES20.glGenTextures(1,textureHandle,0);
GLUtil.checkGlError(“GLGENTEXTRES”);
if(textureHandle[0]==0){
抛出新的RuntimeException(“加载纹理时出错”);
}
Log.v(“GLUtil”,“Handler:”+textureHandle[0]);
final BitmapFactory.Options=new BitmapFactory.Options();
//默认情况下,Android会根据设备的分辨率和所需的时间对位图应用预缩放
//您放置图像的资源文件夹。我们根本不希望Android缩放位图,所以可以肯定,
//我们设为假。
options.inScaled=false;
//读入资源
最终位图位图=BitmapFactory.decodeStream(is,null,选项);
如果(位图==null){
抛出新的运行时异常(“无法加载位图”);
}
//绑定到OpenGL中的纹理
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D,textureHandle[0]);
GLUtil.checkGlError(“glBindTexture”);
GLUtils.texImage2D(GLES20.GL_纹理_2D,0,位图,0);
GLUtil.checkGlError(“texImage2D”);
bitmap.recycle();
GLES20.glTexParameteri(GLES20.GL_纹理_2D,GLES20.GL_纹理_最小_过滤器,GLES20.GL_最近);
GLES20.glTexParameteri(GLES20.GL_纹理_2D,GLES20.GL_纹理_MAG_过滤器,GLES20.GL_最近);
Log.v(“GLUtil”,“加载纹理正常”);
返回textureHandle[0];
}