我目前正在研究一個帶有OpenGL的小玩具程序,它在剪輯空間視圖中顯示了一個場景,即它繪製了一個立方體以可視化規範視圖體積並在立方體內部進行投影變換模型繪製。顯示模型圖的代碼片段:OpenGL - 投影后的正確曲面法線
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glScalef(1.0f, 1.0f, -1.0f);
glMultMatrixd(projectionMat);
glMultMatrixd(modelviewMat);
glEnable(GL_LIGHTING);
draw_model();
glDisable(GL_LIGHTING);
因此,自然,繪製的模型是「扭曲的」(這是期望的行爲)。然而,光照是錯誤的,因爲表面法線也被投影矩陣變換,並且因此在變換之後不與它們的表面正交。我試圖完成的是在扭曲模型的表面具有正確的法線的意義上,「正確」的照明。
問題是 - 我該怎麼做?我正在使用法線通常的轉置 - 逆矩陣法則,但據我所知,這就是OGL默認的法線。我想我將不得不重新計算表面法線後,模型視圖矩陣轉換表面,但如何做到這一點?還是有另一種方式?
你想要做[這樣的事情](http://www.arcsynthesis.org/gltut/Texturing/Tutorial%2017.html#d0e15797)?我的教程解釋瞭如何去做,但它是基於着色器的邏輯。這一切仍然只是矩陣數學,它甚至使用矩陣堆棧,所以你應該能夠翻譯它。 –
其實,「雙重投影」正是我想要做的,是的:)正如你在你的教程中所描述的,重點是在標準化的設備座標中看到「奇怪」的對象形狀。但是,我並沒有真正發現/理解你在曲面法線上做了什麼來在NDC空間中獲得「正確」的照明。在我的例子中,從反轉換模型視圖矩陣中「移除」投影部分是否足以使法線僅由「真實」模型視圖矩陣轉換?我非常喜歡OGL newb,所以請耐心等待:D – user1845810
你讀過我的回答了嗎?另外,本教程不會在NDC空間中進行照明。渲染位置的空間不一定是你照亮的空間。 –