In my program, I change the modelview matrix with a matrix Q. Q, of course, is a 4x4 matrix because that’s what the modelview matrix is. However, I want to apply Q to a vector representing a point P(x,y,z) which is 3 dimensions. What does the 4th variable in the modelview matrix represent? How would I rotate P by Q? Should I just multiply P by the upper-left 3x3 matrix in Q?
The forth value is 1 or zero depending on the whether you have a point or vector.
For vector [x y z 0]. Now add two vectors
v1+v2 = [x1 y1 z1 0]+[x2 y2 z2 0] = [x1+x2 y1+y2 z1+z2 0]
so addition of two vectors is a vector. What about a point and vector? We use a 1 to denote a point
v+p = [x y z 0]+[xp yp zp 1] = [x+xp y+yp z+zp 1]
which makes sense, a vector translate a point
What if we subtract two points?
p1-p2 = [x1 y1 z1 1]-[x2 y2 z2 1] = [x1-x2 y1-y2 z1-z2 0]
and we know the difference of two points is a vector.
Here is the interesting part. What if you add two points?
p1+p2 = [x1 y1 z1 1]+[x2 y2 z2 1] = [x1+x2 y1+y2 z1+z2 2],
With regular linear algebra, addition of two points just doesn’t make sense. But how come we can take the average of two points?
midpoint = (p1+p2)/2
which is an addition of points. This is because we are taking a linear combination of the points. As long as the coefficient of the sum
c0p0 + c1p1 + … cnpn
add to 1, we are okay. Going back to the addition of points [x1+x2 y1+y2 z1+z2 2], we need to normalize the weights so the 2 becomes 1
so [(x1+x2)/2 (y1+y2)/2 (z1+z2)/2 1] is the sum of p1+p2.
Note that the transformation matrices will equally work properly. In fact, without a system like this , we would not be able to represent translation with a matrix.
- Points are in a so called linear space
- Vectors are in vector space
but they are disjoint, we join them by adding a coordinate. This is called homogeneous (sp?) space or coordinate.
Note that, we cannot represent projections properly in this space, so there is another, called Gaussian space…
Hope this is helps.