So i have an app that when it sees an particularly pictures, it set some actions. And a picture should appear on the screen (it does not). When you click on that picture, it starts an video. The video works fine, all i have to do is touch the screen and it starts. There is something I'm missing because the picture is not loading. I get one ERROR in Logcat and is something like this:
所以我有一个应用程序,当它看到一个特别的图片时,它设置了一些动作。并且图片应该出现在屏幕上(它没有)。当您点击该图片时,它会启动一个视频。视频工作正常,我所要做的就是触摸屏幕然后启动。由于图片没有加载,我有些东西丢失了。我在Logcat中得到一个ERROR,它是这样的:
08-29 10:15:44.102: E/libEGL(2314): call to OpenGL ES API with no current context (logged once per thread)
CODE: This is instantiated when i run the program: The model is not a billboard so it skips that part and goes on to loading the texture.
代码:这是在我运行程序时实例化的:模型不是广告牌,因此它会跳过该部分并继续加载纹理。
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;
}
This is how the SetModelProperties
function look like:
这就是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;
}
The object is not null, and it should enter in scale and texture. (LogCat status of it):
该对象不为null,它应该以比例和纹理输入。 (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]
The setAction class that changes the visibility:
更改可见性的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!");
}
}
}
}
All Logcat LOG:
所有Logcat日志:
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 = com.metaio.unifeye.ndk.IUnifeyeMobileGeometry@4af880
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 when Marker is detected and should set texture to visible:
检测到标记时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: com.metaio.unifeye.ndk.IUnifeyeMobileGeometry@4af880texturecom.metaio.unifeye.ndk.IUnifeyeMobileGeometry@4af880
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
And Code for Detection:
和检测代码:
@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, "");
}
}
}
}
}
}
}
1 个解决方案
#1
0
It was in the wrong thread, so i did this:
这是错误的线程,所以我这样做:
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!");
}
#1
0
It was in the wrong thread, so i did this:
这是错误的线程,所以我这样做:
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!");
}