java如何在arCore平面中设置三维模型而无需点击
我想在检测到平面时立即在弧心的随机部分上设置三维模型。不确定要使用哪种方法进行设置
addOnUpdateListener(this::onUpdate);
private void onUpdate(FrameTime frameTime) {
if (numOfModels > 0) return;
modelLoader1 = new ModelLoader(weakReference);
Frame frame = arFragment.getArSceneView().getArFrame();
Collection<Plane> planes = frame.getUpdatedTrackables(Plane.class);
for (Plane plane : planes) {
if (plane.getTrackingState() == TrackingState.TRACKING) {
addObject(Uri.parse("andy_dance.sfb"));
break;
}
}
}
private void addObject(Uri model) {
Frame frame = arFragment.getArSceneView().getArFrame();
安卓.graphics.Point pt = getScreenCenter();
List<HitResult> hits;
if (frame != null) {
hits = frame.hitTest(pt.x, pt.y);
for (HitResult hit : hits) {
Trackable trackable = hit.getTrackable();
if (trackable instanceof Plane &&
((Plane) trackable).isPoseInPolygon(hit.getHitPose())) {
modelLoader1.loadModel(hit.createAnchor(), model);
break;
}
}
}
}
public void loadModel(Anchor anchor, Uri uri) {
if (owner.get() == null) {
Log.d(TAG, "Activity is null. Cannot load model.");
return;
}
ModelRenderable.builder()
.setSource(owner.get(), uri)
.build()
.handle((renderable, throwable) -> {
MainActivity activity = owner.get();
if (activity == null) {
return null;
} else if (throwable != null) {
activity.onException(throwable);
} else {
activity.addNodeToScene(anchor, renderable);
}
return null;
});
return;
}
public void addNodeToScene(Anchor anchor, ModelRenderable renderable) {
numOfModels++;
AnchorNode anchorNode = new AnchorNode(anchor);
TransformableNode node = new TransformableNode(arFragment.getTransformationSystem());
node.setRenderable(renderable);
node.setParent(anchorNode);
node.setLocalPosition(new Vector3(0f, 0f, 0f));
modelLoader1.setNumofLivesModel0(2);
arFragment.getArSceneView().getScene().addChild(anchorNode);
setNodeListener(node, anchorNode, modelLoader1);
到目前为止,我能够用一个模型填充屏幕,但是在屏幕的中心,如果可能的话,我们现在想把模型设置在角落里
# 1 楼答案
在活动开始时,我实例化了一个新的Vector3对象,以便以后可以将其用于3d模型定位:
通过实现一个ARCore认为是手机位置的世界锚,我们找到了答案:
有了AnchorNode集合,我们就能够在世界上定位一个物体,知道它实际上会在哪里
向量接受的参数。set()是三个浮点数,分别是x、y、z坐标。为了让3d模型显示在相机前面,建议x坐标在-300到.300之间,y坐标在-500到.500之间,z坐标在-7到1之间