2012-02-20 42 views
0

我在哪裏可以找到一些使用反射貼圖的好例子?是否有可能在OpenGL ES 1.0?我試圖使用glTexEnvx,但我不知道如何使用它。我也有一些問題:Android OpenGL反射/環境紋理

1)反射貼圖是否需要紋理座標?在像3ds max這樣的程序中 - 事實並非如此。
2)我可以改變反射率與角度依賴關係(做出某種菲涅耳效應)而無需編寫着色器?
3)我可以使用黑色/白色紋理來掩蓋漫反射物質上的反射嗎?

回答

1

glTexEnv設置類似於紋理中的樣本如何與材質顏色相結合。它不會做環境映射。在固定管道桌面OpenGL上,您可能會使用glTexGen。 OpenGL ES中沒有glTexGen

你可以做的是利用紋理矩陣堆棧。 ES不支持三維紋理,但支持三維紋理座標。因此,將頂點法線複製到紋理座標中,並確保您使用常規矩陣(如果沒有縮放,它只是從對象空間到世界空間的轉換部分)加載紋理矩陣堆棧。這樣你就可以得到與世界空間法線相當的3d紋理座標。讓GL將它們用作紋理中的二維索引將允許您使用球形貼圖進行環境貼圖。

這不是一個Android例子,但是我能找到的最好的在線例子並沒有做任何愚蠢的事情,就像諾基亞以前的Symbian/Series 60例子那樣,在CPU上進行正常計算(明確)是this one。鏈接的文章解釋了這種方法,幷包含一個鏈接到實現它的.cpp。 OpenGL ES在不同的平臺之間是相同的,所以它應該直接連接到Android。

  1. 不是你問的意思;這個概念是一個帶紋理的非旋轉圖元圍繞着對象 - 每個頂點的環境地圖座標是通過沿頂點的法線投射一條射線來計算的,直到它碰到概念邊界幾何體並計算出其中的紋理座標。所以你需要有效的法線,但你不需要提供紋理座標。

  2. 不是真的,至少據我瞭解;菲涅耳效應取決於你和表面之間的角度,而環境映射只取決於世界空間中的物體旋轉。

  3. 是的,但你很可能最終不得不使用多個渲染過程。 ES要求至少有兩個紋理單元可用,因此至少可以執行環境+掩碼 - 如果您有其他組件可用,則可以在將所有內容累積到幀緩衝區的同時執行多個渲染。