开发者社区 问答 正文

在图像检测应用程序上使用手势旋转3D模型

我正在研究图像检测android应用程序。

我已经成功检测到图像并针对该图像显示了模型,但是存在以下问题。

当我使用Surface Detection android app时,我使用Arfragments了Quaternion对象,然后使用了transformable函数来旋转模型。

但是知道我使用的是ArSceneView我编写的这段代码,但是当图像检测后显示模型时,它使用SceneForm以90度角显示我的模型。

我希望当用户单击模型时它将旋转。你能帮我吗?

提前致谢。

Node node = new Node();       
    Pose pose =Pose.makeTranslation(0.0f,0.0f,0.25f);
    node.setParent(this);
    node.setLocalPosition(new Vector3(pose.tx(),pose.ty(),pose.ty()));
    node.setLocalRotation(new Quaternion(pose.qx(),pose.qy(),pose.qz(),pose.qw())); 
    if(node!= null)
    {
    Quaternion rotation1 = Quaternion.axisAngle(new Vector3(1.0f, 0.0f, 0.0f), 90); // rotate X axis 90 degrees
    Quaternion rotation2 = Quaternion.axisAngle(new Vector3(0.0f, 1.0f, 0.0f), 90); // rotate Y axis 90 degrees
    node.setLocalRotation(Quaternion.multiply(rotation1, rotation2));
    }

展开
收起
垚tutu 2019-11-28 22:38:05 789 分享 版权
阿里云 AI 助理回答

在你的场景中,你希望用户点击模型时它能旋转。根据你的代码片段,你已经成功地将模型添加到了场景中,并且设置了一个初始的旋转。为了响应用户的点击事件并旋转模型,你需要为你的节点(node)添加一个点击监听器(ClickListener)。

以下是一个简化的示例,说明如何给节点添加点击监听器并在用户点击时旋转模型:

// 假设node是你的模型节点
node.setRenderable(yourRenderable); // 确保你的节点有渲染对象

// 添加点击监听器
node.setOnTapListener((hitTestResult, motionEvent) -> {
    // 当模型被点击时,定义旋转动作
    Quaternion rotationAroundY = Quaternion.axisAngle(new Vector3(0.0f, 1.0f, 0.0f), 90); // 例如,绕Y轴旋转90度

    // 应用旋转到当前的局部旋转上,这里使用Quaternion.multiply实现旋转累加
    node.setLocalRotation(Quaternion.multiply(node.getLocalRotation(), rotationAroundY));

    // 如果需要只旋转一次,可以在这里添加逻辑来移除监听器或设置标志
});

// 别忘了将node添加到场景中

这段代码会在每次用户点击模型时,让模型绕Y轴额外旋转90度。如果你希望模型在每次点击后回到初始状态或者有其他特定的旋转行为,你可以调整rotationAroundY的参数或者在点击处理逻辑中加入更多条件判断和操作。

请注意,Sceneform库已不再维护,但上述逻辑在任何支持ARCore并且有相应场景图管理功能的AR SDK中都应该是类似的。如果考虑长期开发和维护,也可以探索使用Google的ARCore SDK或其他现代AR开发工具如ARKit(iOS平台)或Unity的AR Foundation等。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
问答地址: