Suppose you have a plane equation in local space and you'd like to express that plane equation in world space. The plane in local space is written as:
\[P := (n, w)\]
where \(n\) is the plane normal and \(w\) is the plane offset.
A point \(x\) is on the plane if
\[n \cdot x = w\]
Now define a transform \(A\) as
\[ A := (R, p) \]
where \(R\) is an orthonormal rotation matrix and \(p\) is a translation vector.
Suppose we have a transform \(A\) that transforms points in local space into world space. With our transform \(A\) we can convert any point \(x_1\) in local space (space 1) into world space (space 2):
\[x_2 = R x_1 + p\]
Also any vector \(n_1\) in local space can be converted to world space:
\[n_2 = R n_1\]
Also suppose we have a plane defined in local space (space 1). Then for any point \(x_1\) in local space:
\[n_1 \cdot x_1 = w_1 \]
The main problem now is to find \(w_2\), the plane offset in world space. We can achieve this by substitution. First invert the transform relations above:
\[x_1 = R^T (x_2 - p)\]
\[n_1 = R^T n_2\]
where \(R^T\) is the transpose of \(R\). Recall that the inverse of an orthonormal matrix is the equal to the transpose.
Now substitute these expressions into the local space plane equation:
\[R^T n_2 \cdot (R^T (x_2 - p)) = w_1\]
\[R^T n_2 \cdot R^T x_2 - R^T n_2 \cdot R^T p = w_1\]
The rotations cancel out since they are orthonormal. Also the dot product is equivalent to matrix multiplication by the transpose. For example:
\[R^T n_2 \cdot R^T x_2 = n_2^T R R^T x_2 = n_2^T I x_2 = n_2 \cdot x_2\]
\[n_2 \cdot x_2 = w_1 + n_2 \cdot p\]
From this we can identify the world space plane offset \(w_2\):
\[w_2 = w_1 + n_2 \cdot p\]
Of course it is easy to transform a plane if you have it expressed in terms of a normal and position:
\[P := (n,a)\]
where \(a\) is a point on the plane. The trick is then to find \(a\) given just the normal and offset description.
\[n \cdot x = w \]
After looking at this for a minute, it appears that if I use the point:
\[a := wn\]
\[n \cdot wn = w(n \cdot n) = w\]
so it is easy to find a point on the plane given the normal and offset. Then we can just transform \(n\) and \(a\).
2018-09-04 17:00 -0700