您需要将平面转换为不同的表示形式。其中N是法线,O是平面上的任意点。您已经知道的正常情况是您的(xyz)。平面上的一个点也很容易,它是你的正常N乘以你的距离d。
以正常方式通过 4x4 矩阵变换O ,这将成为您的新O。您将需要一个 Vector4 与 4x4 矩阵相乘,将 W 分量设置为 1 (x, y, z, 1)。
同样通过 4x4 矩阵变换N,但将 W 分量设置为 0 (x, y, z, 0)。将 W 组件设置为 0 意味着您的法线不会被翻译。如果您的矩阵不仅仅是平移和旋转,那么这一步就不是那么简单了。而不是乘以你的变换矩阵,你必须乘以矩阵的逆矩阵的转置,即这里有Matrix4.Transpose(Matrix4.Invert(Transform))
一个很好的解释。
您现在有一个新的法线向量N和一个新的位置向量O。但是我想你想要它再次以 xyzd 形式出现?没问题。和以前一样,xyz 是您的正常N,剩下的就是计算 d。d 是平面到原点的距离,沿法线向量。因此,它只是O和N的点积。
你有它!如果你告诉我你用什么语言做这个,我也很乐意用代码输入。
编辑,在伪代码中:
平面是vector3 xyz
和number d
,矩阵是matrix4x4 M
vector4 O = (xyz * d, 1)
vector4 N = (xyz, 0)
O = M * O
N = transpose(invert(M)) * N
xyz = N.xyz
d = dot(O.xyz, N.xyz)
xyz
并d
代表新飞机