2014-07-26 144 views
0

我在進行場景渲染時使用了正交投影。我正在渲染分辨率爲128x128的紋理。現在我想渲染具有相同分辨率的其他紋理,但我想獲得不同的細節。我發佈的圖片可以清楚的事情了使用幾何着色器(OpenGL)在一次渲染中多次渲染

enter image description here

正如你可以看到有一個灰色的場景和3個攝像頭呈現同樣的事情,但具有不同的距離和觀察平面尺寸。由於3將在相同分辨率的3個紋理上渲染,所以這些紋理將包含相同的信息,但具有不同的細節量。

我可以在3遍中做到這一點,並在每次渲染前重新定義相機。但是,由於視圖是相同的,所以只能靠近一點,我猜可能有一些使用幾何着色器來克服這個問題的方法,並且一次完成。任何建議?

回答

2

隨着layered rendering,你可以一次做到這一點。然而,你會讓幾何着色器爲每個圖層增加基元(當然,對每個「複製」應用不同的轉換)。

但是,您不能直接渲染到3個不同的紋理對象。要使分層渲染起作用,您需要一些分層紋理對象,如array texture。由於所有的紋理都是相同的大小,因此可以使用具有3個圖層的單個數組紋理,而不是3個單獨的2D紋理,但我無法確定它是否適合您的用例。

+0

理論上我認爲可以創建一個引用三個普通2d紋理的二維數組紋理視圖,然後將視圖作爲分層顏色附件添加到FBO上。無論如何,在實踐中直接使用數組可能是更好的選擇。 – peppe

+0

我也可以通過使用imageStore而不是輸出fragcolor將其擴展到3D紋理? – tigeradol

+0

@tigeradol:好吧,沒有任何有用的方法。關鍵在於您需要爲每個視圖分別進行光柵化。您當然可以使用圖像存儲來寫入圖像中的任意位置,但是您會在單個片段着色器調用中編寫什麼顏色?這沒有什麼意義。如果要繪製的對象非常簡單,如紋理四邊形,則每個視圖只是對不同位置的紋理進行採樣,這隻會稍微有意義。但是,您最好使用多個渲染目標。 – derhass