在Android MetaIO项目中加载IGeometry时出错

在Android MetaIO项目中加载IGeometry时出错,android,metaio,Android,Metaio,IGeometry在android metaIO项目中被重写的“loadContent”方法中加载。我想在点击事件后将另一个对象加载到“mItem”。但它不能装新椅子。这是调试时出现的错误: 错误:只能在渲染线程中创建几何体 尝试了许多方法来解决这个问题,但都无法解决。其中之一就是我尝试了下面的方法,但不确定它是否正确,也不知道该放在哪里 private IGeometry mItem; @Override protected void loadContents

IGeometry在android metaIO项目中被重写的“loadContent”方法中加载。我想在点击事件后将另一个对象加载到“mItem”。但它不能装新椅子。这是调试时出现的错误:

错误:只能在渲染线程中创建几何体

尝试了许多方法来解决这个问题,但都无法解决。其中之一就是我尝试了下面的方法,但不确定它是否正确,也不知道该放在哪里

    private IGeometry mItem;

    @Override
        protected void loadContents() {
            try {

                // TODO: Load desired tracking data for planar marker tracking
                boolean result = metaioSDK
                        .setTrackingConfiguration("ORIENTATION_FLOOR");
                MetaioDebug.log("Tracking data loaded: " + result);


                //
                //Load the item one
                mItem = loadItem("Project/Assets/chair.obj");
                mGestureHandler.addObject(mItem, 1);
                setVisibleItem(false);
             }catch (Exception e){}
        }

        public IGeometry loadItem(String objectPath){       
              IGeometry item = null;        
              try {             
                     // TODO: Load desired tracking data for planar marker tracking             
                     boolean result = metaioSDK     .setTrackingConfiguration("ORIENTATION_FLOOR");                        
                     MetaioDebug.log("Tracking data loaded: " + result);

                 // Load Object             
                     String filepath = AssetsManager.getAssetPath(
                        getApplicationContext(),
                        objectPath);            

                     item = metaioSDK.createGeometry(filepath);

                if (item != null) {
                    item.setScale(200f);
                    item.setTranslation(new Vector3d(0f, 0f, 0f));
                    item.setRotation(new Rotation((float) Math.PI / 2f, 0f,
                            0f));

                    //mGestureHandler.addObject(item, position);
                                } else
                    MetaioDebug.log(Log.ERROR, "Error loading geometry: "
                            + filepath);        }catch (Exception e){}
                    return item;    }



View.OnClickListener onClickColorTheme1(final Button but)  {
        return new View.OnClickListener() {
            public void onClick(View v) {

                        //mItem is a global variable
                mItem = loadItem("Project/Assets/newChair.obj");
            }
        };
    }
mSurfaceView.queueEvent是正确的处理方法。您可以将其添加到loadItem方法:


这对我帮助很大!
mSurfaceView.queueEvent(new Runnable(){
@Override
 public void run(){
         mItem = loadItem("Project/Assets/newChair.obj");
     }

} 
public IGeometry loadItem(final String objectPath)
{   
  mSurfaceView.queueEvent(new Runnable()
  {
    @Override
    public void run()
    {
      // load the items here
    }
  }
}