簡體   English   中英

簡單的平面曲面細分着色器

[英]Simple Flat Plane Tessellation Shader

第1部分:

所以我想創建一個基本的曲面細分程序,它采用一個四邊形平面並將其轉換為一個更詳細/細分的四邊形平面。 比如下圖。 它被細分的程度取決於用戶控件,由統一(最初)傳入。 但是,我對曲面細分着色器非常陌生,以至於我什至不知道如何執行此操作。

平面鑲嵌

這通常是如何完成的? 當然,您不應該在着色器程序之前實際繪制四邊形平面,因為根據我的理解,四邊形不會以這種方式細分,而是細分為如下圖所示的方式:

四曲面細分

我相信答案可能是繪制一個點平面,然后將這些點細分為更多點,然后這些點在我認為的幾何着色器中轉換為適當大小的四邊形? 或者,不是將點轉換為四邊形,我可以在每四個最近的點之間繪制四邊形嗎(那會好得多)? 非常感謝示例!

注意:僅使用 GLSL > 4.0 & C(無 C++/Python)

第2部分:

在我開始第 1 部分工作后,我將如何使某些四邊形比其他四邊形更加細分,例如這樣?:

在此處輸入圖片說明

我希望靠近相機的部分更加細分。

第 3 部分:

如果我能走那么遠,下一部分將是改變點的 z 軸,使平面成為一個有趣的環境。 這將通過閱讀 2Dsampler 來完成,我知道如何做到這一點。 但是,如果我在第 1 部分中關於使用點平面是正確的,那么我需要做的不僅僅是改變轉換為四邊形的點,因為四邊形本質上需要共享頂點,以便四邊形之間沒有間隙。 那怎么辦? 或者,如果我們在點之間繪制四邊形,每個點都是適當的高度,那么這不是問題。

第1部分

是的,您是對的:將“補丁”生成為簡單的點網格,將曲面細分級別指定為 TCS(曲面細分控制着色器)中的制服,並在 TES(曲面細分評估着色器)中生成頂點數據。

聽起來很復雜? 這是我基於我的工作的一個很好的教程: http : //antongerdelan.net/opengl/tessellation.html

第2部分

你在這里談論的是 LOD(或細節級別)。 您需要將網格的左下角多邊形計數較高的部分細分並渲染為一個單獨的對象。

您建議的方法是正確的:將整個場景分成“塊”並分別確定每個塊的 LOD(即細分參數),通常是通過某種距離到相機的算法。

第 3 部分

另一個出色的教程,我相信它完全符合您的要求: http : //codeflow.org/entries/2010/nov/07/opengl-4-tessellation/

我使用這種方法來獲得非常詳細但內存和幀效率高的地形。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM