首页 > 解决方案 > 将 3d 对象与相机图像匹配以实现增强现实

问题描述

我正在开发一个简单的 AR 引擎,但在将 3d 对象与相机图像匹配时遇到了问题。为了更好地理解,我用图片说明了它。点 A 和 B 在 3d 空间中。点 C 和 D 在纹理平面上给出。从相机到平面的距离是已知的。我知道如何获得 Anear、Bnear、Afar、Bfar、Cnear、Dnear、Cfar 和 Dfar 的坐标。问题是如何在 3d 空间中找到点 A' 和 B',例如向量 d==d' 和点 Anear == Cnear 和 Bnear == Dnear(3d 点到屏幕的投影应该具有相同的坐标)谁能帮我计算一下这里的数学,或者至少指出我在哪里寻找答案?

PS。似乎我的问题描述不够清楚,所以换句话说:我在 3d 空间中有一对点,在纹理平面上有一对点(来自网络摄像头的图像)。我需要将点放在距相机正确距离的 3d 空间中 - 因此在透视变换后,它们将点覆盖在纹理平面上。需要保留 3d 点的空间关系。在图中,视觉解决方案是点 A' 和 B'。虚线说明了透视变换(它们被投射在与点 C 和 D 相同的位置的近平面上)。

问题说明

标签: unity3dopenglaugmented-realityperspectivecameraprojection-matrix

解决方案


给定 K 相机位置和 X=A' 和 Y=B'

var angleK = Vector3.Angle(C-K,D-K);
var angleB = Vector3.Angle(D-K, A-B);
var XK = Mathf.Sin(angleB)*(Vector3.Distance(A,B))/Mathf.Sin(angleK);
var X= K+(C-K).normalized*XK;
var Y= B + X - A;

推荐阅读