Jetpack XR için ARCore, kullanıcının algılanan elleri hakkında bilgi sağlayabilir ve eller ile ilişkili eklemler için duruş bilgisi verir. Bu el verileri, kullanıcının ellerine öğe ve modeller (ör. bir araç menüsü) eklemek için kullanılabilir:
Jetpack XR için ARCore oturumu oluşturma
Jetpack XR için ARCore oturumu aracılığıyla el bilgilerine erişme. Session
almak için Oturumların yaşam döngüsünü anlama başlıklı makaleyi inceleyin.
El verilerini alma
El verileri sol ve sağ el için ayrı olarak kullanılabilir. Her eklemin poz konumlarına erişmek için her elin state
simgesini kullanın:
Hand.left(session).state.collect { // or Hand.right(session)
// Hand state has been updated.
// Use the state of hand joints to update an entity's position.
}
Eller aşağıdaki özelliklere sahiptir:
isActive
: Elin izlenip izlenmediği.handJoints
: El eklemlerinin pozlarla eşlendiği bir harita. El eklemi pozları OpenXR standartları ile belirtilir.
Uygulamanızda el verilerini kullanma
Kullanıcının el eklemlerinin konumları, 3D nesneleri kullanıcının ellerine sabitlemek için kullanılabilir. Örneğin, bir modeli sol avuç içine eklemek için:
Hand.left(session)?.state?.collect { leftHandState ->
val palmPose = leftHandState.handJoints[HandJointType.PALM] ?: return@collect
// the down direction points in the same direction as the palm
val angle = Vector3.angleBetween(palmPose.rotation * Vector3.Down, Vector3.Up)
palmEntity.setHidden(angle > Math.toRadians(40.0))
val transformedPose =
session.perceptionSpace.transformPoseTo(
palmPose,
session.activitySpace,
)
val newPosition = transformedPose.translation + transformedPose.down*0.05f
palmEntity.setPose(Pose(newPosition, transformedPose.rotation))
}
Dilerseniz sağ elinizin işaret parmağının ucuna bir model eklemek için:
Hand.right(session)?.state?.collect { rightHandState ->
val tipPose = rightHandState.handJoints[HandJointType.INDEX_TIP] ?: return@collect
// the forward direction points towards the finger tip.
val angle = Vector3.angleBetween(tipPose.rotation * Vector3.Forward, Vector3.Up)
indexEntity.setHidden(angle > Math.toRadians(40.0))
val transformedPose =
session.perceptionSpace.transformPoseTo(
tipPose,
session.activitySpace,
)
val position = transformedPose.translation + transformedPose.forward * 0.03f
val rotation = Quaternion.fromLookTowards(transformedPose.up, Vector3.Up)
indexEntity.setPose(Pose(position, rotation))
}