You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 15:43:26