【发布时间】:2018-02-28 20:08:24
【问题描述】:
问题:
我需要计算由 Ax + By + Cz + D = 0 定义的平面的交点形状 (purple) 和由矩形角发出的 4 条光线定义的截锥体(红色箭头)。结果应该是四边形(4 个点),重要的要求是结果形状必须在平面的局部空间中。 平面是用变换矩阵创建的 T(平面的法线是vec3(0, 0, 1) 在T 的空间中)。
解释:
这是我的矩形投影到另一个空间的透视形式(变换/矩阵/节点)。我能够通过 plane-line intersection 算法 (伪代码):
定义:
// Plane defined by normal (A, B, C) and D
struct Plane { vec3 n; float d; };
// Line defined by 2 points
struct Line { vec3 a, b; };
路口:
vec3 PlaneLineIntersection(Plane plane, Line line) {
vec3 ba = normalize(line.b, line.a);
float dotA = dot(plane.n, l.a);
float dotBA = dot(plane.n, ba);
float t = (plane.d - dotA) / dotBA;
return line.a + ba * t;
}
透视形式有一些问题,因为一些光线可能与平面平行(交点无限大)或最终形状是自相交的。 它在某些情况下有效,但对于任意转换来说还不够。如何通过透视得到正确的平面相交部分?
简单地说,我需要通过任意透视“相机”获得任意平面的可见部分。
感谢您的建议。
【问题讨论】:
标签: geometry line intersection perspective plane