Advertisement

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)

还没有任何评论哟~