в GLES20 android, как загрузить 3D-объект, содержащий более 10 текстур?

Я новичок в GLES20 android, в моем проекте мне нужно визуализировать 3D-объект в GLES20, я сделал некоторую часть до загрузки одного текстурированного 3D-объекта, но когда я прихожу с более текстурированным объектом, он не работает, он берет первый файл текстуры, оставшиеся текстуры не рендеринг в нем.

 for (int bytestring = 0; bytestring < objData.getTextureData().size(); bytestring++) {
                   //   bytestring=7;
                       byte[] TexturebytestringData = objData.getTextureData().get(bytestring);
                       Integer textureId = textures.get(TexturebytestringData);
                      // Integer emissiveTextureId = textures.get(objData.getEmissiveTextureData());
                       if (textureId == null && objData.getTextureData() != null) {
                           Log.i("ModelRenderer","Loading texture '"+objData.getTextureFile().get(bytestring)+"'...");
                           ByteArrayInputStream textureIs = new ByteArrayInputStream(/*objData.getTextureData()*/TexturebytestringData);
                        //   ByteArrayInputStream emissiveTextureIs = null;

                         //  textureId = GLUtil.loadTexture(/*textureIs, emissiveTextureIs,*/objData.getTextureData());
                           final BitmapFactory.Options options = new BitmapFactory.Options();
                           // By default, Android applies pre-scaling to bitmaps depending on the resolution of your device and which
                           // resource folder you placed the image in. We don’t want Android to scale our bitmap at all, so to be sure,
                           // we set inScaled to false.
                           options.inScaled = false;
                        /*   if(bitmap!=null)
                               bitmap.recycle();*/
                           // Read in the resource
                            final Bitmap bitmap = BitmapFactory.decodeStream(textureIs, null, options);
                           if (bitmap == null) {
                               throw new RuntimeException("couldnt load bitmap");
                           }



                           GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureHandle[bytestring]);

                           //.. call glTexParameter as needed
                           GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST);
                           GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D,   GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_NEAREST);
                           GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0);
                           GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0);
                           Thread.sleep(50);
                           textureIs.close();
                       }
                       textureId=textureHandle[bytestring];
                       if (textureId == null) {
                           textureId = -1;
                       }
                       GLES20.glDeleteTextures(textureHandle.length, textureHandle, 0);

при этом он отображает только первую текстуру и ее png.

не могли бы вы помочь, как загрузить или отрендерить 3D-объект, который имеет больше текстур и PNG. Заранее спасибо.

0 ответов

Другие вопросы по тегам