2015-10-17 106 views
1

我喜歡渲染幾個在頂點着色器中動態計算的表面。曲面是通過存儲在頂點屬性緩衝區中的2d或3d網格中的頂點位移產生的。然而,如果非常大(數百萬頂點)和許多具有不同分辨率的表面被渲染,我需要生成大量填充內存的「無聊」網格數據,可能會降低渲染速度,有時會中斷渲染,如果大新的網格生成。OpenGL生成頂點屬性

有什麼辦法可以隨時生成簡單的頂點屬性網格,而不需要存儲它們嗎?

回答

1

您當然可以直接在頂點着色器中生成一個統一的網格。在合理的現代GL中,您可以完全使用無屬性。着色器中的gl_VertexID輸入會告訴你當前正在處理的頂點。用一點整數除法和模數,你可以很容易地將其映射到一個2D網格。你仍然需要一些方法來描述位移。直觀的方式似乎是使用2D紋理(並且可以很容易地從網格中的座標導出texcoords),但是有不同的選項。你甚至可以通過一些數學模型來程序化生成它。

+0

但是哪個OpenGL調用實際上運行的東西呢?是否有可能使用'glDrawArrays'沒有任何數組綁定? – dronus

+0

在WebGL中給它一個快速嘗試,只是爲了找出WebGL根本不公開'gl_VertexID' ...所以'gl_VertexID'似乎不被所有OpenGL風格所支持,儘管它很簡單。我只是現在添加一個標籤WebGL .. – dronus

+0

但是,'gl_VertexID'當然可以通過一個int數組來模擬,並且對於所有比它的大小更小的原子可以重複使用'gl_VertexID'。所以更好,然後我沒有任何東西... – dronus