ARCore - 获取相机与世界向前的角度(-Z 轴)



有没有办法获得ARCore相机所面对的角度与ARCore的欧拉角度之一的比较?我知道我们可以获得ARCore相机的前向矢量,但我不确定如何从中获得正确的角度。

可能是想多了。这是获取相机与 -Z 轴的角度(正角度位于 -Z 轴右侧(的简单方法。这种方法也可用于计算相机面向不同轴的角度。

// get the camera
Camera arCamera = arFragment.getArSceneView().getScene().getCamera();
// get forward vector of the camera
Vector3 cameraPos = arCamera.getWorldPosition();
Vector3 cameraForward = Vector3.add(cameraPos, arCamera.getForward().scaled(1.0f));
Vector3 forwardVector = Vector3.subtract(cameraForward, cameraPos);
forwardVector = new Vector3(forwardVector.x, 0, forwardVector.z).normalized();
double degreesFromCamToNegZAxis = Vector3.angleBetweenVectors(Vector3.forward(), forwardVector);
// take the dot product between the two vectors
// to see from what side of the -Z axis it is facing
float dotProduct = Vector3.dot(Vector3.right(), forwardVector);
// value is between -1 to 1 
// if negative, forward vector is facing to the right of -Z axis
if (dotProduct < 0) {
degreesFromCamToNegZAxis = -degreesFromCamToNegZAxis;
}

如果您想从不同的轴上找出答案,只需将矢量更改为您尝试与之相关的世界即可。在本例中,正角位于正 Z 轴的右侧。

double degreesFromCamToZAxis = Vector3.angleBetweenVectors(Vector3.back(), forwardVector);
// take the dot product between the two vectors
// to see from what side of the Z axis it is facing
float dotProduct = Vector3.dot(Vector3.left(), forwardVector);
// value is between -1 to 1
// if negative, forward vector is facing to the left of Z axis
if (dotProduct < 0) {
degreesFromCamToZAxis = -degreesFromCamToZAxis;
}

这是一张可视化ARCore使用的坐标系的图像(与Android的传感器相同(。 ARCore 坐标系参考

最新更新