2012-08-28 31 views
0

所以我有一個應用程序,當它看到一個特別的圖片,它設置了一些行動。屏幕上應該顯示一張圖片(不會)。當你點擊該圖片時,它會啓動一個視頻。 視頻工作正常,我所要做的就是觸摸屏幕並開始。 有一些我失蹤,因爲圖片沒有加載。 我得到一個錯誤的logcat的,是這樣的:無法加載檢測到的動作紋理

08-29 10:15:44.102: E/libEGL(2314): call to OpenGL ES API with no current context (logged once per thread) 

CODE: 當我運行程序這個被實例化: 該模型是不是一個廣告牌,因此跳過這一部分,並接着加載紋理。

private boolean mLoadGeometry(MetaioModel model, String assetsDirectoryPath) { 
    // String modelName = model.name; 
    // MetaioModel model = getModelForName(modelName); 
    if (model != null) { 
     LogService.log(TAG, "object : " + model.model); 
     if (model.model == null) { 
      if ((model.isBillboard != null) && model.isBillboard) { 
       loadBillboard(entity.absolutePath + "/" + model.texture, model); 
       LogService.log(TAG, "LoadBillboard : " + model.texture); 
      } else { 

       LogService.log(TAG, " model.geometryFile : " + model.file); 
       if (model.file != null) { 
        String modelPath = assetsDirectoryPath + "/" + model.file /* + ".md2" */; 
        model.model = mMobileSDK.loadGeometry(modelPath); 
        LogService.log(TAG, "> Loaded model: " + modelPath); 
        if (model.model != null) { 
         LogService.log(TAG, "> model.texture: " + model.texture); 
         if ((model.texture != null) && !"".equals(model.texture)) { 
          LogService.log(TAG, "Setting texture = " + entity.absolutePath + "/" + model.texture); 
          model.model.setTexture(entity.absolutePath + "/" + model.texture); 
          LogService.log(TAG, "Texture set"); 

         } 
         LogService.log(TAG, "[Loaded geometry] model.model = " + model.model); 
        } else { 
         LogService.log(TAG, "[Load geometry] object is null"); 
        } 
       } else { 
        LogService.log(TAG, "> model.geometryFile is NULL"); 
       } 
      } 
      boolean success = setModelProperties(model, assetsDirectoryPath); 
      if (!success) { 
       return false; 
      } 
     } 
    } 
    return true; 
} 

這是SetModelProperties功能樣子如何:

private boolean setModelProperties(MetaioModel metaioModel, String assetsDirectoryPath) { 
    LogService.log(TAG, "[MetaioModel] "+ metaioModel +"-----texture"+ metaioModel.texture); 
    if (metaioModel == null) { 
     return false; 
    } else { 
     IUnifeyeMobileGeometry object = metaioModel.model; 
     if (object != null) { 
      if (metaioModel.translate != null) { 
       if (metaioModel.translate.length == 3) { 
        Vector3d vector3d = new Vector3d(metaioModel.translate[0], metaioModel.translate[1], metaioModel.translate[2]); 
        object.setMoveTranslation(vector3d); 
        LogService.log(TAG, "[Properties] translate set"); 
       } else { 
        LogService.log(TAG, "[ERROR] setModelProperties : translate ---> Vector is of wrong size !!!"); 
       } 
      } 
      if (metaioModel.scale != null) { 
       if (metaioModel.scale.length == 3) { 
        Vector3d vector3d = new Vector3d(metaioModel.scale[0], metaioModel.scale[1], metaioModel.scale[2]); 
        object.setMoveScale(vector3d); 
        LogService.log(TAG, "[Properties] scale3 set"); 
       } else { 
        LogService.log(TAG, "[ERROR] setModelProperties : scale ---> Vector is of wrong size !!!"); 
       } 
      } 
      if (metaioModel.rotate != null) { 
       if (metaioModel.rotate.length == 3) { 
        Vector3d vector3d = new Vector3d(metaioModel.rotate[0], metaioModel.rotate[1], metaioModel.rotate[2]); 
        object.setMoveRotation(vector3d); 
        LogService.log(TAG, "[Properties] rotate3 set"); 
       } else if (metaioModel.rotate.length == 4) { 
        Vector4d vector4d = new Vector4d(metaioModel.rotate[0], metaioModel.rotate[1], metaioModel.rotate[2], metaioModel.rotate[3]); 
        object.setMoveRotation(vector4d); 
        LogService.log(TAG, "[Properties] rotate4 set"); 
       } else { 
        LogService.log(TAG, "[ERROR] setModelProperties : rotate ---> Vector is of wrong size !!!"); 
       } 
      } 
      if (metaioModel.visible != null) { 
       object.setVisible(metaioModel.visible); 
       LogService.log(TAG, "[Properties] visibility set to : " + metaioModel.visible); 
      } 

      if (metaioModel.occlude != null) { 
       object.setOcclusionMode(metaioModel.occlude); 
       LogService.log(TAG, "[Properties] occlusion set to : " + metaioModel.occlude); 
      } 
      if (metaioModel.picking != null) { 
       object.setPickingEnabled(metaioModel.picking); 
       LogService.log(TAG, "[Properties] is pickable set to : " + metaioModel.picking); 
      } 

      if (metaioModel.xray != null) { 
       object.setRenderAsXray(metaioModel.xray); 
       LogService.log(TAG, "[Properties] xray set to : " + metaioModel.xray); 
      } 

      if (metaioModel.transparency != null) { 
       int transparency = metaioModel.transparency; 
       object.setTransparency((short) transparency); 
       LogService.log(TAG, "[Properties] transparency set to : " + transparency); 
      } 

      if (metaioModel.texture != null) { 
       object.setTexture(entity.absolutePath + "/" + metaioModel.texture); 
       object.setVisible(true); 

       LogService.log(TAG, "[Properties] Rendered set to : "+object.getIsRendered()); 
       LogService.log(TAG, "[Properties] Visibility set to : "+object.getIsVisible()); 
       LogService.log(TAG, "[Properties] texture set to : " + entity.absolutePath + "/" + metaioModel.texture); 
      } 
     } 
    } 
    return true; 
} 

的對象不是空的,它應該在規模和質地進入。 (它logcat的狀態):

-28 12:12:36.096: I/AugmentedRealityActivity(5910): ==> model : MetaioModel [name=movie, file=square.md2, isBillboard=null, translate=null, scale=[0.5, 0.5, 0.5], rotate=null, visible=null, occlude=null, picking=null, xray=null, transparency=null, texture=start.png, movie_texture=null, billboard=null, defaultTexture=null, geometryFile=null] 

的的setAction類改變能見度:

private void setActions(ArrayList<Action> actions, String directory) { 
    if ((actions != null) && (actions.size() > 0)) { 
     for (int i = 0; i < actions.size(); i++) { 
      String type = actions.get(i).type; 
      Action action = actions.get(i); 
      LogService.log(TAG, "==> action Type : " + type); 

      if ("saveScreenshot".equalsIgnoreCase(type)) { 
       LogService.log(TAG, "==> saveScreenshot"); 
       captureScreenShot(entity.absolutePath + "/Screenshots/screenshot.jpg"); 
      } 
else if ("setTexture".equalsIgnoreCase(type)) { 
       LogService.log(TAG, "==> setTexture"); 
       String modelName = action.model; 
       if ((modelName != null) && (modelName.length() > 0)) { 
        LogService.log(TAG, "InSetTEXTURE======Inainte de Texture set: " + action.file); 
        String texture = action.file; 
        if (texture.length() > 0) { 
         String texturePath = entity.absolutePath + "/" + texture; 
         MetaioModel metaioModel = getModelForName(modelName); 
         IUnifeyeMobileGeometry object = metaioModel.model; 
         if (object != null) { 
          object.setTexture(texturePath); 
          // flag = !flag; 
          // System.out.println("flag = " + flag); 
          // object.setTexture("changed.jpg", null, true); 

          // object.setTexture(entity.absolutePath + "/" + model.texture); 
          // if (flag) { 
          // } else { 
          // object.setTexture(entity.absolutePath + "/normal.png" /* + model.texture */); 
          // } 

          LogService.log(TAG, "InSetTEXTURE======Texture set: " + texturePath); 
         } else { 
          LogService.log(TAG, "ERROR: object is null!"); 
         } 
        } 
       } 
      } 

所有logcat的LOG:

08-28 12:12:33.846: I/AugmentedRealityActivity(5910): >> Tracking data: /mnt/sdcard/Android/data/com.cardemotion.mobile/files/VWSEEMORE/TEMP/movie_texture/TrackingData_MarkerlessFast.xml 
08-28 12:12:33.846: I/AugmentedRealityActivity(5910): >> AugmentedRealityActivity.onCreate() 
08-28 12:12:36.056: I/AugmentedRealityActivity(5910): > Loading assets from : /mnt/sdcard/Android/data/com.cardemotion.mobile/files/VWSEEMORE/TEMP/movie_texture 
08-28 12:12:36.056: I/AugmentedRealityActivity(5910): ==> action Type : loadGeometry 
08-28 12:12:36.056: I/AugmentedRealityActivity(5910): ==> load geometry 
08-28 12:12:36.056: I/AugmentedRealityActivity(5910): object : null 
08-28 12:12:36.056: I/AugmentedRealityActivity(5910): model.geometryFile : square.md2 
08-28 12:12:36.066: I/AugmentedRealityActivity(5910): > Loaded model: /mnt/sdcard/Android/data/com.cardemotion.mobile/files/VWSEEMORE/TEMP/movie_texture/square.md2 
08-28 12:12:36.066: I/AugmentedRealityActivity(5910): > model.texture: start.png 
08-28 12:12:36.066: I/AugmentedRealityActivity(5910): Setting texture = /mnt/sdcard/Android/data/com.cardemotion.mobile/files/VWSEEMORE/TEMP/movie_texture/start.png 
08-28 12:12:36.086: I/AugmentedRealityActivity(5910): Texture set 
08-28 12:12:36.086: I/AugmentedRealityActivity(5910): [Loaded geometry] model.model = [email protected] 
08-28 12:12:36.086: I/AugmentedRealityActivity(5910): [MetaioModel] MetaioModel [name=movie, file=square.md2, isBillboard=null, translate=null, scale=[0.5, 0.5, 0.5], rotate=null, visible=null, occlude=null, picking=null, xray=null, transparency=null, texture=start.png, movie_texture=null, billboard=null, defaultTexture=null, geometryFile=null]-----texturestart.png 
08-28 12:12:36.096: I/AugmentedRealityActivity(5910): [Properties] scale3 set 
08-28 12:12:36.096: I/AugmentedRealityActivity(5910): [Properties] Rendered set to : false 
08-28 12:12:36.096: I/AugmentedRealityActivity(5910): [Properties] Visibility set to : true 
08-28 12:12:36.096: I/AugmentedRealityActivity(5910): [Properties] texture set to : /mnt/sdcard/Android/data/com.cardemotion.mobile/files/VWSEEMORE/TEMP/movie_texture/start.png 
08-28 12:12:36.096: I/AugmentedRealityActivity(5910): ==> action Type : setMovieTexture 
08-28 12:12:36.096: I/AugmentedRealityActivity(5910): ==> setMovieTexture 
08-28 12:12:36.096: I/AugmentedRealityActivity(5910): ==> setMovieTexture modelName : movie 
08-28 12:12:36.096: I/AugmentedRealityActivity(5910): Got 1 models 
08-28 12:12:36.096: I/AugmentedRealityActivity(5910): Returning model : movie 
08-28 12:12:36.096: I/AugmentedRealityActivity(5910): ==> model : MetaioModel [name=movie, file=square.md2, isBillboard=null, translate=null, scale=[0.5, 0.5, 0.5], rotate=null, visible=null, occlude=null, picking=null, xray=null, transparency=null, texture=start.png, movie_texture=null, billboard=null, defaultTexture=null, geometryFile=null] 
08-28 12:12:36.116: I/AugmentedRealityActivity(5910): set movie texture : /mnt/sdcard/Android/data/com.cardemotion.mobile/files/VWSEEMORE/TEMP/movie_texture/demo_movie.3g2,false,true 

logcat中當檢測標記,並應設置紋理可見:

08-28 12:17:01.926: I/AugmentedRealityActivity(5910): >> Marker detected.. 
08-28 12:17:01.926: I/System.out(5910): >> cosName patch1 
08-28 12:17:01.926: I/AugmentedRealityActivity(5910): Action size in action!=null ----1/mnt/sdcard/Android/data/com.cardemotion.mobile/files/VWSEEMORE/TEMP/movie_texture 
08-28 12:17:01.926: I/AugmentedRealityActivity(5910): ==> action Type : setVisible 
08-28 12:17:01.926: I/AugmentedRealityActivity(5910): ==> setVisible 
08-28 12:17:01.926: I/AugmentedRealityActivity(5910): Got 1 models 
08-28 12:17:01.926: I/AugmentedRealityActivity(5910): Returning model : movie 
08-28 12:17:01.926: I/AugmentedRealityActivity(5910): ==> modelName: movie setVisible : true 
08-28 12:17:01.926: I/AugmentedRealityActivity(5910): Devine Visible==> modelName: movie true object is object: [email protected][email protected] 
08-28 12:17:01.926: I/AugmentedRealityActivity(5910): modelName unde sunt acuma= movie 
08-28 12:17:01.926: I/AugmentedRealityActivity(5910): Model name : movie 
08-28 12:17:01.926: I/AugmentedRealityActivity(5910): Got 1 models 
08-28 12:17:01.926: I/AugmentedRealityActivity(5910): Returning model : movie 
08-28 12:17:01.926: I/AugmentedRealityActivity(5910): model.texture : 'start.png' 
08-28 12:17:01.926: I/System.out(5910): model.texture : 'start.png' 
08-28 12:17:01.926: I/System.out(5910): Pose set : 1 

和代碼檢測:

@Override 
     public void onTrackingEvent(PoseVector poses) { 
     for (int i = 0; i < poses.size(); i++) { 
      Pose pose = poses.get(i); 
      if (pose.isDetected()) { 
       ArrayList<MetaioEvent> items = entity.events; 
       for (int k = 0; k < items.size(); k++) { 
        MetaioEvent item = items.get(k); 
        Event event = item.event; 
        String type = event.type; 
        String cosName = pose.getCosName() != null ? pose.getCosName().toLowerCase() : "NULL"; 
        String cosNameFromFile = event.cosName != null ? event.cosName.toLowerCase() : "NULL"; 

        if ("markerDetected".equals(type)) { 
         LogService.log(TAG, ">> Marker detected.."); 
         if (!"".equals(cosName) && !"".equals(cosNameFromFile) && cosName.equals(cosNameFromFile)) { 
          System.out.println(">> cosName " + cosName); 
          ArrayList<Action> actions = item.actions; 
          if ((actions != null) && (actions.size() > 0)) { 
           LogService.log(TAG, "Action size in action!=null ----"+actions.size() + "" + entity.absolutePath); 
           setActions(actions, entity.absolutePath); 
           for (Action action : actions) { 
            if ((action != null) && (action.type != null)) { 
             String modelName = action.model; 
             LogService.log(TAG, "modelName unde sunt acuma= " + modelName); 
             if ((modelName != null) && (modelName.length() > 0)) { 
              LogService.log(TAG, "Model name : " + modelName); 
              MetaioModel model = getModelForName(modelName); 
              LogService.log(TAG, "model.texture : '" + model.texture + "' "); 
              System.out.println("model.texture : '" + model.texture + "' "); 

              IUnifeyeMobileGeometry object = model.model; 
              String cosName2 = action.cosName; 

              if ((object != null)) { 
               if ("camera".equals(cosName2)) { 
                object.setCos(0); 
                System.out.println("Pose set 0 "); 
               } else { 
                object.setCos(pose.getCosID()); 
                System.out.println("Pose set : " + pose.getCosID()); 
               } 
              } 
             } 
            } 
           } 
          } 
         } 
        } 
       } 
      } else if (pose.isLost()) { 
       for (MetaioEvent item : entity.events) { 
        Event event = item.event; 
        String type = event.type; 
        String cosName = pose.getCosName() != null ? pose.getCosName().toLowerCase() : "NULL"; 
        String cosNameFromFile = event.cosName != null ? event.cosName.toLowerCase() : "NULL"; 

        if ("markerLost".equals(type)) { 
         LogService.log(TAG, ">> Marker lost.."); 
         if (!"".equals(cosNameFromFile) && !"".equals(cosName) && cosName.equals(cosNameFromFile)) { 
          ArrayList<Action> actions = item.actions; 
          if ((actions != null) && (actions.size() > 0)) { 
           setActions(actions, ""); 
          } 
         } 
        } 
       } 
      } 
     } 
    } 

回答

0

這是在錯誤的線程,所以我這樣做:

if (object != null) { 
          mUnifeyeSurfaceView.queueEvent(new Runnable() { 
           @Override 
           public void run() { 
            object.setTexture(texturePath); 
           } 
          }); 


          LogService.log(TAG, "Texture set: " + texturePath); 
         } else { 
          LogService.log(TAG, "ERROR: object is null!"); 
         }