Interact with 3D模型在SceneView中,不需要ArCore

3
我想在Sceneview上加载一个3D对象,不需要相机和ArCore。因此,我创建了一个简单的xml布局如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <com.google.ar.sceneform.SceneView
        android:id="@+id/scene"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</RelativeLayout>

然后像这样加载3D对象:

   private fun renderObject() {
    ModelRenderable.builder()
        .setSource(this, R.raw.andy)
        .build()
        .thenAccept {
            it?.let {
                node = Node().apply {
                    setParent(scene)
                    localPosition = Vector3(0f, 0f, -1f)
                    localScale = Vector3(3f, 3f, 3f)
                    name = "Andy"
                    renderable = it
                }

                scene.addChild(node)
            }
        }
        .exceptionally {
            val builder = AlertDialog.Builder(this)
            builder.setMessage(it.message)
                .setTitle("error!")
            val dialog = builder.create()
            dialog.show()
            return@exceptionally null
        }
}

我得到了我期望的3D对象:

enter image description here

现在的问题是如何与这个3D对象进行交互,旋转、缩放和选择元素?我看到使用ArCore有TransformableNodes,但如何在没有ArCore的情况下使用它呢?


一样啊。你有找到解决方法吗? - QauseenMZ
这里也有同样的问题,有没有解决方法? - Chidi
有人得到了解决方案吗 @Chydee - Abhishek
是的,@Abhishek,我找到了一个解决方案。虽然不是库,但我不得不在我的项目中设置一个引擎来手动渲染模型。它运行良好,我仍在努力理解我的代码。 - Chidi
1个回答

0

这个仓库里有一个工作示例:https://github.com/chnouman/SceneView

它使用了自定义的node (DragTransformableNode),相关代码片段在SceneViewActivity.kt中。

    private fun addNodeToScene(model: ModelRenderable) {
        if (sceneView != null) {
            val transformationSystem = makeTransformationSystem()
            var dragTransformableNode = DragTransformableNode(1f, transformationSystem)
            dragTransformableNode?.renderable = model
            sceneView.getScene().addChild(dragTransformableNode)
            dragTransformableNode?.select()
            sceneView.getScene()
                .addOnPeekTouchListener { hitTestResult: HitTestResult?, motionEvent: MotionEvent? ->
                    transformationSystem.onTouch(
                        hitTestResult,
                        motionEvent
                    )
                }
        }
    }

我已经fork了这个repo,如果有人对键盘输入支持感兴趣,我正在进行相关工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接