我在应用程序中使用AR Core作为3D Viewer。我不是将Sceneform用于AR渲染,而是用于3D渲染模型。我面临的问题是如何通过滑动手势或触摸事件360度旋转模型。使用Sceneform可以做到这一点,还是我需要使用更困难的方法,例如Open GL。
这是我的代码。
if(mymap[key]->second) { //its true
do this
} else { // its false
do this
}
if(mymap[key]->second) { do this } else {do this}
答案 0 :(得分:1)
我分享我的新鲜经验,也许有人仍然需要解决方案。
您有两种选择可以实现这一目标:
如上所述,您可以实现自己的手势,比例和旋转 使用androids标准手势或场景的addOnPeekTouchListener监听器。
将Transformable节点用于其设施,则只需删除平移控制器并实现新的旋转控制器。
让我们考虑使用Kotlin代码的选项2的详细信息
为拖动手势创建新的旋转控制器:
class DragRotationController(transformableNode: BaseTransformableNode, gestureRecognizer: DragGestureRecognizer) :
BaseTransformationController<DragGesture>(transformableNode, gestureRecognizer) {
// Rate that the node rotates in degrees per degree of twisting.
var rotationRateDegrees = 0.5f
public override fun canStartTransformation(gesture: DragGesture): Boolean {
return transformableNode.isSelected
}
public override fun onContinueTransformation(gesture: DragGesture) {
var localRotation = transformableNode.localRotation
val rotationAmountX = gesture.delta.x * rotationRateDegrees
val rotationDeltaX = Quaternion(Vector3.up(), rotationAmountX)
localRotation = Quaternion.multiply(localRotation, rotationDeltaX)
transformableNode.localRotation = localRotation
}
public override fun onEndTransformation(gesture: DragGesture) {}
}
要删除翻译控制器:
node.translationController.isEnabled = false
node.removeTransformationController(translationController)
将我们的自定义旋转控制器添加到节点
val dragRotationController = DragRotationController(node, transformationSystem.dragRecognizer)
node.addTransformationController(dragRotationController)
这是DragTransformableNode
import com.google.ar.sceneform.ux.TransformableNode
import com.google.ar.sceneform.ux.TransformationSystem
class DragTransformableNode(transformationSystem: TransformationSystem) :
TransformableNode(transformationSystem) {
private val dragRotationController = DragRotationController(
this,
transformationSystem.dragRecognizer
)
init {
translationController.isEnabled = false
removeTransformationController(translationController)
removeTransformationController(rotationController)
addTransformationController(dragRotationController)
}
}
答案 1 :(得分:0)
您可以使用Sceneform轻松完成此操作。实际上,您没有任何Sceneform代码。您只需要使用Android的标准手势识别功能来检测手势并使用它来更新节点的旋转度。 https://developer.android.com/training/gestures/detector
答案 2 :(得分:0)
我认为您的实现非常接近应如何工作。只需看看Google(https://github.com/google-ar/sceneform-android-sdk/blob/master/samples/hellosceneform/app/src/main/java/com/google/ar/sceneform/samples/hellosceneform/HelloSceneformActivity.java)的hellosceneform示例。