如何在Unity的Vuforia中获取图像目标四角的屏幕像素位置用于透视变换?
Unity+Vuforia 获取图像目标实际四角的屏幕像素位置
要获取Vuforia图像目标在屏幕上的实际四角像素位置(即你提到的黄色标记点),核心是将图像目标的世界空间四角转换为屏幕坐标,步骤如下:
关键思路
Renderer.GetLocalCorners()返回的是图像目标本地空间的四角,需要先转换为世界空间坐标,再通过ARCamera的WorldToScreenPoint()方法转换为屏幕像素位置。
实现代码
将以下脚本挂载到你的ImageTarget对象上:
using UnityEngine; using Vuforia; public class ImageTargetScreenCorners : MonoBehaviour { private ImageTargetBehaviour _targetBehaviour; private Camera _arCamera; private readonly Vector3[] _localCorners = new Vector3[4]; private readonly Vector2[] _screenCorners = new Vector2[4]; void Awake() { _targetBehaviour = GetComponent<ImageTargetBehaviour>(); _arCamera = Camera.main; // 确保ARCamera被设置为MainCamera,或通过FindObjectOfType<Camera>()获取 } void Update() { // 仅在目标被追踪时获取坐标,避免无效数据 if (_targetBehaviour.CurrentStatus != TrackableBehaviour.Status.TRACKED) return; // 获取本地空间四角(对应图像目标的物理边界) GetComponent<Renderer>().GetLocalCorners(_localCorners); // 转换为屏幕像素坐标 for (int i = 0; i < 4; i++) { Vector3 worldPoint = _targetBehaviour.transform.TransformPoint(_localCorners[i]); _screenCorners[i] = _arCamera.WorldToScreenPoint(worldPoint); } // 输出四角坐标(顺序:左下、左上、右上、右下) Debug.Log($"屏幕四角坐标:\n左下: {_screenCorners[0]}\n左上: {_screenCorners[1]}\n右上: {_screenCorners[2]}\n右下: {_screenCorners[3]}"); } }
注意事项
- 坐标原点:
WorldToScreenPoint()返回的屏幕坐标以屏幕左下角为原点,y轴向上。如果需要适配UI系统的左上角原点,可将y值转换为Screen.height - _screenCorners[i].y。 - 追踪状态:必须在目标处于
TRACKED状态时获取坐标,否则会得到错误的位置数据。 - Renderer组件:ImageTarget对象默认带有Renderer组件,若你移除了它,需要手动添加或通过其他方式获取目标的边界点。
内容的提问来源于stack exchange,提问作者Kai
相关产品推荐
相关产品推荐

