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