2010-09-26 47 views
8

我正在學習使用OpenGL在2D圖形中使用普通地圖(每像素照明?)。我設法圍繞着Sobel算子和法線貼圖的生成(主要歸功於this),這是從(2D)像素數組中創建(2D)法線數組的數據。如何在OpenGL中應用法線貼圖?

(大多數,我已經找到了特有的3D教程和論壇主題的使用和建模軟件。我的目標是實現這個功能我自己,在C++中。)

  • 我該怎麼辦一旦我已經得到了正常的 圖?
  • 是否需要註冊 OpenGL?
  • 是否需要關聯 與紋理,如果是的話, 如何完成?
  • 它是如何映射到紋理四維的2D ?
  • (這是一些 我可以毫不着色器/ GLSL嗎?)

回答

6

我建議你看看:

This nvidia presentation on bumb mapping

我沒有看過這一段時間,但我記得它會在大部分的細節在實施凹凸貼圖着色器,應該得到幾個想法運行。

This other nvidia tutorial for implementing bump mapping in the cg shader langauge

This bump mapping tutorial might also be helpful

我知道所有這些都不是完全正常的映射,但它們是一個好的開始。

另外,雖然在着色器語言方面存在差異,但如果要使用GLSL,則不應該很難在它們之間轉換它們。 ybungalobill說,你可以做到沒有着色器,但除非你正在開展一個教育項目(對於你的教育)或一個特定的嵌入式設備,我不知道爲什麼你會想要 - 但如果你需要this是你想要看的地方,它是在着色器之前編寫的,並且在稍後更新以供參考。

+0

謝謝,nVidia演示文稿和3DKingdoms演示文稿非常棒。我見過一個paulsprojects,但是當它在立方體地圖上開始時我就迷了路。 – zyndor 2010-09-26 16:54:31

5
  • 我該怎麼辦,一旦我已經得到了法線貼圖?
  • 我需要註冊OpenGL嗎?

是的,你需要加載它作爲紋理。

  • 是否需要與所述紋理相關聯,如果是的話,它怎麼辦?

如果你的意思是與顏色紋理相關聯,那麼沒有。您需要創建一個包含法線貼圖的紋理,以便稍後使用OpenGl。

  • 它是如何映射到2D紋理四邊形的?

法線貼圖只是另一種質感,將其綁定並映射任何其它質地。

法線貼圖將法線存儲在切線空間座標中,因此要計算每個像素的光線,您需要知道光源在切線空間座標系中的相對位置。這是通過設置每個頂點的額外參數(法線,切線,副法線),計算切線空間座標中的光源位置並沿三角形內插此位置來完成的。在片段着色器中,您可以在法線貼圖中查找法線,並根據插值參數執行所需的光照計算。

  • (這是東西,我可以不着色器/ GLSL嗎?)

是的,您可以使用一些傳統擴展來編寫多紋理環境組合函數。從來沒有做過,但它看起來像地獄。

+0

偉大的多紋理是我想到的(是的,我會用着色器=))。謝謝! – zyndor 2010-09-26 16:53:34

1

的話題是很老,但我會回答它誰可以在這裏尋求任何幫助,任何初學者:

1)& 2)

法線貼圖是像一個普通的漫反射紋理,你需要從磁盤加載它,像使用漫反射紋理一樣創建您的紋理2D,並使用其他紋理將其鎖定,以將其發送到着色器。 因此,總結一下,正常的地圖,高度圖等在處理CPU端時並沒有什麼不同......它總是加載它們,創建紋理並鎖定它們。

3)

法線貼圖只是存儲每一個片段的法線貼圖的方式。 將它們與相應的漫反射紋理一起使用會更好,因爲這是您可以僞造小細節的方式。儘管如此,在某些情況下並不總是必需的...例如,上次我正在繪製水的方法時......我使用了dudv地圖和法線貼圖,但沒有使用相應的漫反射貼圖,因爲我用於渲染成紋理以實現反射。

4)

正常映射被映射具有相同的紋理座標作爲漫反射紋理... 它意味着如果你有一個四至極座標是0; 0,0 1,1 0, 1; 1 這些是您用於映射兩個紋理的座標。

5)

你可以做到這一點沒有着色器,我想......你甚至可以不用OpenGL的,如果你想...着色器是專爲這些類型的操作,並且它會更容易用着色器做到這一點。

因此,法線貼圖是將法線向量編碼爲顏色的貼圖... 法線向量是3D向量,顏色也是3D向量。 當您使用光照時,通常會將法線從頂點着色器發送到片段着色器......片段着色器將插值頂點法線值以找出像素自身法線向量的近似值。 這是默認完成的...

使用法線貼圖,您不使用頂點法線矢量,而是在紋理中編碼的法線矢量。

首先,您必須將光照計算從世界空間轉換爲切線空間,這是在頂點着色器中完成的。

然後,您將像素材貼圖一樣在片段着色器中採樣法線貼圖。您將獲得像素的RGB顏色。 您必須將該值轉換爲法向量,即將其乘以2並減1,即rgb * 2 - 1,然後將其用作光照計算中的法向量。