我已经使用ARCore成功地显示了一个3D模型,但我如何将模型直接放置在一个平面的顶部?
mArFragment = (ArFragment) getSupportFragmentManager().findFragmentById(R.id.ar_fragment);
mArFragment.setOnTapArPlaneListener((hitResult, plane, motionEvent) -> {
Anchor anchor = hitResult.createAnchor();
ModelRenderable.builder()
.setSource(this, Uri.parse("ArcticFox_Posed.sfb"))
.build()
.thenAccept(modelRenderable -> addModelToScene(anchor, modelRenderable))
.exceptionally(throwable -> {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(throwable.getMessage())
.show();
return null;
});
});
你可以用ShapeFactory制作一个可渲染的平面,并使你的fox可渲染成为一个平面对象的子对象,像这样 。
private fun addModelToScene(anchor: Anchor, renderable: Renderable) {
val anchorNode = AnchorNode(anchor)
val node = TransformableNode(fragment.transformationSystem)
node.renderable = renderablePlane //create plane renderable
node.setParent(anchorNode)
val nodeFox = Node()
nodeFox.renderable = renderable
//edit localPosition to fit on the plane with nodeFox.localPosition
nodeFox.setParent(node)
fragment.arSceneView.scene.addChild(anchorNode)
}