OSG learning (73) under scaling conditions to calculate gl_NormalMatrix
发布时间
阅读量:
阅读量
顶点与法线的变换方式存在差异。
顶点变换所采用的公式为:gl_ModelViewProjectionMatrix * gl_Vertex
而法线变换则使用:gl_NormalMatrix * gl_Normal
其中,NormalMatrix 是 ModelView 矩阵的逆矩阵转置形式。由于 gl_ModelViewProjectionMatrix 包含了旋转、缩放和平移等多种变换因素,因此 gl_NormalMatrix 同样涵盖了这些变换因素。
通常情况下,法线向量不应受到缩放操作的影响,因此在进行变换时需要对缩放进行修正。对于均匀缩放的情况,只需对法线向量进行归一化处理即可;而对于非均匀缩放,则需在各个分量上乘以相应的缩放系数(若为放大操作,则应乘以对应的放大倍数)。
在 osg 中,该矩阵的计算方式如下:
osg/State.cpp
void State::updateModelViewAndProjectionMatrixUniforms()
{
if (_modelViewProjectionMatrixUniform.valid()) _modelViewProjectionMatrixUniform->set((*_modelView) * (*_projection));
i
全部评论 (0)
还没有任何评论哟~
