我的问题:
如何获取两个 3D 点并将它们锁定到一个轴?例如,使它们的 z 轴都为 0。
我正在尝试做的事情:
我在一个场景中有一组 3D 坐标,代表一个带有金字塔的盒子。我还有一个相机,由另一个 3D 坐标表示。我从场景坐标中减去相机坐标并对其进行归一化,返回一个指向相机的向量。然后我与相机点后面的平面进行射线平面相交。
O + tD
其中 O(原点)是相机位置,D 是从场景点到相机的方向,t 是光线从相机点与平面相交所需的时间。
如果这没有意义,这里是一个粗略的绘图:
我进行了广泛搜索,据我所知,这被称为使用“针孔相机”。
问题不在于我的相机旋转,我已经消除了它。问题在于将交点转换为重心 (uv) 坐标。
x 轴上的平移如下所示:
uaxis.x = -a_PlaneNormal.y;
uaxis.y = a_PlaneNormal.x;
uaxis.z = a_PlaneNormal.z;
point vaxis = uaxis.CopyCrossProduct(a_PlaneNormal);
point2d.x = intersection.DotProduct(uaxis);
point2d.y = intersection.DotProduct(vaxis);
return point2d;
而 z 轴上的平移看起来像这样:
uaxis.x = -a_PlaneNormal.z;
uaxis.y = a_PlaneNormal.y;
uaxis.z = a_PlaneNormal.x;
point vaxis = uaxis.CopyCrossProduct(a_PlaneNormal);
point2d.x = intersection.DotProduct(uaxis);
point2d.y = intersection.DotProduct(vaxis);
return point2d;
我的问题是:如何将射线平面交点转换为 x 轴和 z 轴上的重心坐标?