normal的transformation matrixh和vertex的transformation matrix并不相同。以下是推导:
vertex上的normal可以定义一个平面, 顶点在平面上,则有(nx, ny, nz, q)*(x0, yo, zo, w)' = 0。当顶点做完model-view transformation后,M为model-view transfornation matrix, 则有(nx, ny, nz, q)*inverse(M)*M*(x0, yo, zo, w)' = 0。变换后的(nx, ny, nz, q)为(nx', ny', nz', q') = (nx, ny, nz, q)*inverse(M), 由于我们并不需要q, 变换后的normal可以写成(nx', ny', nz')= (nx, ny, nz)*inverse(Mu),Mu为M的左上3×3submatrix。最后对(nx', ny', nz')做normalization使其变为unit vector完成变换。
由此得出若使用row vector表示normal则transformation matrix为inverse(Mu),使用column vector表示normal则transformation matrix为inverse(Mu)'
没有评论:
发表评论