【Realtime Rendering 1.1】
1、A linear transform is one that preserves vector addition and scalar multiplication. Specifically,
2、Combining linear transforms and translations can be done using an affine transform.
An affine transform is one that performs a linear transform and then a translation.
The main characteristic of an affine matrix is that it preserves the parallelism of lines, but not necessarily lengths and angles.
3、All rotation matrices have a determinant of one and are orthogonal , the determinant of a rotation matrix is always one, since the matrix is orthogonal.
5、This order change can cause incorrect lighting and backface culling to occur. To detect whether a given matrix reflects in some manner, compute the determinant of the upper left 3 × 3 elements of the matrix. If the value is negative, the matrix is reflective.
Assume that scaling should be done along the axes of the orthonormal, right-oriented vectors fx, f y, and f z.
First, construct the matrix F as below:
7、There are six basic shearing matrices,3 and they are denoted Hxy(s), Hxz(s), Hyx(s), Hyz(s), Hzx(s), and Hzy(s). The first subscript is used to denote which coordinate is being changed by the shear matrix, while the second subscript indicates the coordinate which does the shearing.
8、H′ij(s, t) = Hik(s)Hjk(t)。 Finally, it should be noted that since the determinant of any shear matrix |H| = 1, this is a volume preserving transformation.
10、a transform, consisting of concatenations of only translations and rotations, is called a rigid-body transform and has the characteristic of preserving lengths, angles, and handedness.
The inverse of X is computed as X−1 = (T(t)R)−1 = R−1T(t)−1 = RTT(−t).
Thus, to compute the inverse, the upper left 3 ×3 matrix of R is transposed, and the translation values of T change sign.
11、法线不能用 Model 矩阵进行变换。比如下图：
The proper method transform normal is to use the transpose of the matrix’s adjoint. The traditional answer for transforming the normal is that the transpose of the inverse is computed . This method normally works. The full inverse is not necessary, however, and occasionally cannot be created. The inverse is the adjoint divided by the original matrix’s determinant. If this determinant is zero, the matrix is singular, and the inverse does not exist.
转换法线只要 3x3 矩阵就够了，因为法线没有 translate。
interpolation between one set and another is not a simple matter, two different sets of Euler angles can give the same orientation, so any interpolation should not rotate the object at all.
观察 4.20 可以发现：
14、Matrix Decomposition，The task of retrieving various transforms from a concatenated matrix is called matrix decomposition.
We have already presented two decompositions, those of deriving the translation and rotation matrix for a rigid-body transformation (see Section 4.1.6) and deriving the Euler angles from an orthogonal matrix (Section 4.2.2).
It is trivial to retrieve the translation matrix, as we simply need the elements in the last column of the 4×4 matrix.
We can also determine if a reflection has occurred by checking whether the determinant of the matrix is negative.
find the smallest component (in absolute value) of r, and set it to 0. Swap the two remaining components, and then negate the first9 of these.
This matrix transforms the vector r into the x-axis (ex), s into the y-axis, and t into the z-axis. the final transform for rotating α radians around the normalized vector r is then.
17、 For every 3 × 3 rotation matrix,1 R, that rotates φ radians around any axis, the trace (see page 898 for a definition) is constant independent of the axis.
20、Put the four coordinates of a point or vector p = (px py pz pw)T into the components of a quaternion ˆp, and assume that we have a unit quaternion ˆq = (sinφuq, cos φ).
rotates ˆp (and thus the point p) around the axis uq by an angle 2φ. Note that since ˆq is a unit quaternion, ˆq−1 = ˆq∗. This rotation, which clearly can be used to rotate around any axis
ˆq and −ˆq represent the same rotation. That is, negating the axis, uq, and the real part, qw, creates a quaternion that rotates exactly as the original quaternion does.
Given two unit quaternions, ˆq and ˆr, the concatenation of first applying ˆq and then ˆr to a quaternion, ˆp (which can be interpreted as a point p), is given by Equation 4.41:
21、A quaternion, ˆq, can be converted into a matrix Mq. （书上并未给出此公式的推导过程，而是直接给出此公式）
Here, the scalar is s = 2/n(ˆq). For unit quaternions, this simplifies to:
由 4.44 + 4.45 可以从M推导出四元数4.46：
令 t = q2w −q2x −q2y −q2，可以得到避免除法的公式：
22、The algebraic form of Spherical linear interpolation:
However, for software implementations, the following form, where slerp stands for spherical linear interpolation, is much more appropriate:
The slerp function is perfectly suited for interpolating between two orientations and it behaves well (fixed axis, constant speed). This is not the case with when interpolating using several Euler angles.
introduce quaternions ˆai and ˆai+1 between ˆqi and ˆqi+1.
24、After some algebraic and trigonometric simplification of Equation 4.43,the rotation matrix becomes :
In this equation, we have used the following intermediate calculations:
As can be seen, all square roots and trigonometric functions have disappeared due to the simplifications, and so this is an efficient way to create the matrix.
the entire mesh is often called a skin.
p is the original vertex, and u(t) is the transformed vertex whose position depends on the time t. There are n bones influencing the position of p, which is expressed in world coordinates. The matrix Mi transforms from the initial bone’s coordinate system to world coordinates. Typically a bone has its controlling joint at the origin of its coordinate system. The Bi(t) matrix is the ith bone’s world transform that changes with time to animate the object,
the final location is interpolated from the set of computed points. The matrix Mi is not explicitly shown in some discussions of skinning, but rather is considered as being a part of Bi(t).
the transformed point u will lie in the convex hull of the set of points Bi(t)M−1 i p, for all i = 0. . .n − 1 (fixed t).
Morph targets：基Model + Diff。如下图：
Skinning、Morph Target 一起使用可以达到非常好的效果。
29、透视投影中 z 值是非线性的。
One effect of using a perspective transformation is that the computed depth value does not vary linearly with the input pz value. For example, if n′ = 10 and f′ = 110 (using the OpenGL terminology), when pz is 60 units down the negative z-axis (i.e., the halfway point) the normalized device coordinate depth value is 0.833, not 0.