グラフィッククラスの紹介のために、シーンのスポットライトをモデル化しようとしています。この割り当てでは、modernGLですべてを実行する必要があることを指定しているため、レガシーから何も使用できません。
これを支援するためにOpenGL4.0シェーディング言語クックブックを読んでいますが、ライトのアイスペース座標を取得する方法がわかりません。ワールドスペースでライトを配置したい位置と方向を知っているので、次の方法でライトをアイスペースに変換しようとしました。
//mv = inverse(mv);
vec3 light = vec3(vec4(0.0, 15.0, 0.0, 1.0) * mv);
vec3 direction = vec3(vec4(0.0, -1.0, 0.0, 1.0) * mv);
ここで、mvはによって生成されたモデルビューマトリックスです。
glm::mat4 modelview_matrix = glm::lookAt(glm::vec3(window.camera.x, window.camera.y, window.camera.z), glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(0.0f, 1.0f, 0.0f));
変換なしで。ご覧のとおり、モデルビューとモデルビューの逆数を掛けてアイスペースを取得しようとしました。オブジェクトの反対側に移動すると、オブジェクトの鏡面ハイライトが続くため、これらのどちらも機能しなかったと確信しています。(つまり、オブジェクトの反対側を見ている場合、光は鏡面ハイライトを見ることができないはずです。)