在此glsl着色器样本中,一些顶点法线通过变换转换为视图空间:from sklearn_pandas import DataFrameMapper
createTrainingAndValidation(finalDf, 'words')
data = finalDf[['between_count','words']]
mapper = DataFrameMapper([
(['between_count'], None),
('words',CountVectorizer(ngram_range=(1, 1)))
])
X=mapper.fit_transform(data)
print (X)
为什么我们需要进行这种转换?
vec4(vertNormal,1.0)).xyz
答案 0 :(得分:1)
模型视图矩阵如下:
( X-axis.x, X-axis.y, X-axis.z, 0 )
( Y-axis.x, Y-axis.y, Y-axis.z, 0 )
( Z-axis.x, Z-axis.y, Z-axis.z, 0 )
( trans.x, trans.y, trans.z, 1 )
上方的3 * 3是包含方向和比例的。第四行包含翻译。
对于点的转换,必须考虑整个矩阵,而对于方向矢量的转换,则仅关注方向。
通常,法线矩阵是模型视图矩阵的左上3 * 3的mat3
和inverse
,transposed
。见
mat3 norm_matrix;
vec3 = normalize(norm_matrix * vertNormal);
可以从模型视图矩阵计算法线矩阵:
mat4 mv_matrix;
mat3 norm_matrix = transpose(inverse(mat3(mv_matrix));
vec3 N = normalize(norm_matrix * vertNormal);
如果模型视图矩阵是Orthogonal matrix,则可以跳过inverse
,transpose
,因为逆矩阵等于转置矩阵。
参见In which cases is the inverse matrix equal to the transpose?
vec3 N = normalize(mat3(mv_matrix)* vertNormal);
如果要在视图空间中进行计算,则必须将顶点坐标从模型空间转换为视图空间:
vec4 P = mv_matrix * vec4(vertPos,1.0);
,您必须将法向矢量表格模型空间的方向转换为视图空间:
vec3 N = normalize(norm_matrix * vertNormal);