2010-11-20 117 views
7

由於在OpenGL中使用幾何着色器進行分層渲染在某些驅動程序/硬件上看起來有點不禮貌,所以我想用我自己的解決方案替換功能。這通過使用大紋理作爲rendertarget,例如300的分辨率。然後通過在紋理中渲染100個塊來模擬分層渲染。與分辨率這將導致9瓦/層如下面的樣機:渲染爲紋理的一部分

Tiles

的問題是;如何與OpenGL的這個?據說在幾何着色器的幫助下,一次渲染場景到不同的瓷磚。

回答

2

有沒有簡單的方法來做到這一點。您可以使用幾何着色器將它一起破解,但它很可能會很慢,因爲您必須執行大量幾何實例化,然後使用幾何着色器進行頂點着色,因爲頂點着色器不在遊戲中。

基本解決問題的方法:

  • 離開頂點着色器空,就回到頂點不變
  • 在幾何着色器創建的每一個三角形(一起,你將有9個三角形)8個新實例
  • 在各三角形運行一個將投影三角形的函數。根據您的屏幕截圖,您需要將9個不同的視圖矩陣發送到幾何着色器。
  • 現在安排三角形,使每個呈現在圖像的不同部分。請注意,在投影之後,座標位於[-1; 1],因此您需要將每個三角形的座標除以3,然後將相應的三角形乘以1/3。
  • 如果計算每個像素的phong着色,則需要將相機位置發送到每個頂點的片段着色器,因爲片段着色器不知道屏幕被分割,並且您有9個不同的相機位置。
  • +0

    謝謝你的回答。也許我應該等待GPU製造商把他們的驅動程序集合起來(ATI)。所以他們支持將渲染圖層替換爲'texture2Darray'。 – 2010-11-21 12:00:01

    +0

    是的,絕對。問題是,如果ATI能夠讓他們的驅動程序正常工作...... – 2010-11-21 12:19:23