rastapasta/react-native-gl-model-view

Missing Pixel with obj file

Open

#47 ouverte le 27 juil. 2020

Voir sur GitHub
 (0 commentaires) (0 réactions) (0 assignés)Java (62 forks)github user discovery
bughelp wanted

Métriques du dépôt

Stars
 (425 stars)
Métriques de merge PR
 (Métriques PR en attente)

Description

Hello,Thank you for reading this issue i found that missing pixel when i use GLModelView to load .obj+.mtl file, any solution has not been found yet

react-native 0.61.3 react-native-gl-model-view 1.6.0 android 10

Expected

render complete like windows10 3DViewer

show on windows10 3DViewer:

20200727192553

show on Android GLModelView:

20200727192728

code:

<AnimatedModelView 
    model={{uri: 'man.obj'}}
    texture={{uri: 'man_skin.png'}}
    onStartShouldSetResponder={() => true}
    onResponderRelease={this.onMoveEnd}
    onResponderMove={this.onMove}
    animate={!!fromXY}
    tint={{r: 1.0, g: 1.0, b: 1.0, a: 1.0}}
    scale={0.1}
    rotateX={rotateX}
    rotateZ={rotateZ}
    translateZ={-10}
    style={styles.container}
/>

Personal guess

the .obj and.mtl file are not interguided properly

i'm tried to modify setModelUri() and loadModelFromInputStream() method in RNGLModelView.java but it didn't work

setModelUri() method:
 if (pUri.startsWith(lGeometryHeader)) {
      final String lBase64 = pUri.substring(lGeometryHeader.length());
      final InputStream lInputStream = getInputStreamFromBase64(lBase64);
          
      +InputStream mtlInputStream = null;
      +if(pUri.endsWith(".obj")){
        +String pMtl = pUri.replace(".obj", ".mtl");
        +final String mtlHeader = RNGLModelView.getBase64EncodedGeometryHeader("mtl");
        +final String mtlBase64 = pMtl.substring(mtlHeader.length());
        +mtlInputStream = getInputStreamFromBase64(mtlBase64);
      +}
          
      -model = RNGLModelView.loadModelFromInputStream(lInputStream, lGeometryType);
      +model = RNGLModelView.loadModelFromInputStream(lInputStream, mtlInputStream, lGeometryType);
 }

loadModelFromInputStream() method :
switch (pExtension) {
      case "obj":
        -return Object3D.mergeAll(Loader.loadOBJ(pInputStream, null, 1));
        +return Object3D.mergeAll(Loader.loadOBJ(pInputStream, mtlStream, 1));
      case "3ds":
        return Object3D.mergeAll(Loader.load3DS(pInputStream, 1));
      case "md2":
        return Loader.loadMD2(pInputStream, 1);
      case "asc":
        return Loader.loadASC(pInputStream, 1, false);
      case "model":
        return RNGLModelViewModelLoader.loadMODEL(pInputStream);
    }

Guide contributeur