3

Vertex Shader でライトを計算したい場合、ビュー空間に法線ベクトルが必要です。一般的には以下のようになります (OpenGL Superbible 5th より):

// normalMatrix is retrieved from GLMatrixStack modelViewMatrix
vec3 vEyeNormal = normalMatrix * vNormal

GLTライブラリを使わずにプログラムを書きたい。別のソース ( http://en.wikibooks.org/wiki/GLSL_Programming/GLUT/Diffuse_Reflection ) で、次の式を見つけました。

vec3 normalDirection = normalize(m_3x3_inv_transp * v_normal);

変数 m_3x3_inv_transp は次のように計算されます。

glm::mat3 m_3x3_inv_transp = glm::transpose(glm::inverse(glm::mat3(mesh.object2world)));

私はそれを意識しています:

私の質問は、マトリックスを反転してトランスポンシングした後、NormalMatrix を取得する理由と、計算を反転してそれをチェックする方法です。

4

2 に答える 2