我正在研究图像检测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));
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在你的场景中,你希望用户点击模型时它能旋转。根据你的代码片段,你已经成功地将模型添加到了场景中,并且设置了一个初始的旋转。为了响应用户的点击事件并旋转模型,你需要为你的节点(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等。