【发布时间】:2015-02-17 10:13:45
【问题描述】:
在 y 为上/下、z 为前/后、x 为左/右的坐标系中(如在 Unity3D 中)。
(这是我的意思的糟糕图)
是的
|
|____x
\
z
(我猜z会进出你的显示器)
给定坐标 (x,z) 保证在这个三角形上,我如何得到 y?假设您知道所有三个三角形点的 (x,y,z) 坐标,以及人脸的法线。三角形可以在任何轴上倾斜。
【问题讨论】:
在 y 为上/下、z 为前/后、x 为左/右的坐标系中(如在 Unity3D 中)。
(这是我的意思的糟糕图)
是的
|
|____x
\
z
(我猜z会进出你的显示器)
给定坐标 (x,z) 保证在这个三角形上,我如何得到 y?假设您知道所有三个三角形点的 (x,y,z) 坐标,以及人脸的法线。三角形可以在任何轴上倾斜。
【问题讨论】:
好吧,给定三角形内的任何向量v 和正常的n,我们知道n 和v 的点积等于0(三角形上的所有点都为真)。所以:
nx * vx + ny * vy + nz * vz = 0
解决vy 的小代数,我们有:
vy = -((nz * vz) + (nx * vx)) / ny
但有一件事。 v 必须在三角形平面内,因此您需要将该向量放在三角形平面内,方法是从 v 中减去一个顶点(例如 t1)。
所以:
vx = t1x - x, vz = t1z - z, and vy = t1y - y
因此,您的最终 y 坐标为:y = t1y - vy 其中vy 已在上面定义。
【讨论】:
t1 是三角形三个顶点中的 任何。 v 必须是与法线正交的向量,以便点积为零。您已经拥有t1、x、z,以及您的普通:n。将您的值代入上述等式将得到您想要的y。
t1 中减去{x, y, z} 确保得到的向量v 与您的法线正交。