placementPose method
World pose for content placed on hit: upright and facing the camera on
floors and tables, flat against walls.
Implementation
UArPose placementPose(UArHitResult hit) {
final UArVector3 position = hit.pose.position;
if (hit.isWall) {
UArVector3 normal = hit.pose.up;
final UArVector3 toCamera = controller.value.frame.camera.position - position;
if (normal.dot(toCamera) < 0) normal = -normal;
final UArVector3 flat = UArVector3(normal.x, 0, normal.z).normalized;
final UArVector3 right = UArVector3.up.cross(flat).normalized;
return UArPose(position: position, rotation: UArQuaternion.fromBasis(right, UArVector3.up, flat));
}
final UArVector3 toCamera = controller.value.frame.camera.position - position;
return UArPose(position: position, rotation: UArQuaternion.yaw(atan2(toCamera.x, toCamera.z)));
}