簡體   English   中英

帶有曲面細分着色器的GL_Triangles

[英]GL_Triangles with Tessellation Shaders

當我使用Tessellation着色器時,我是否必須從我的CPU程序補丁而不是三角形傳遞?

    glDrawArrays(GL_PATCHES, 0, 3); //Works with Tess Shaders

    glDrawArrays(GL_TRIANGLES, 0, 3); //Works not with Tess Shaders

什么是補丁完全可視化它? 它可以是一個被細分的三角形嗎?

補丁只是一個沒有真正內在結構的點的集合......你的TCS和TES是有意義的。 GL_TRIANGLES (由3個頂點嚴格定義)不同, GL_PATCHES每個補丁沒有預定義的頂點數。 您可以使用以下方法自行設置補丁中的頂點數:

glPatchParameteri ​(GL_PATCH_VERTICES​​, N);
// where N is some value less than GL_MAX_PATCH_VERTICES

然后,繪制的每個N many頂點定義一個新的補丁基元。

補丁實際上只是用於評估曲面的控制點的集合。 這就是為什么有一個稱為Tessellation Control Shader可選階段,它將數據提供給Tessellation Evaluation Shader 如果沒有關於您正在評估的表面類型的更多詳細信息,關於它們可視化的唯一方法是作為點雲(例如GL_POINTS )。

更新:

假設您正在討論Bézier曲面 ,那么可以將控制點可視化:

貝塞爾曲面

紅點是控制點( GL_PATCHES頂點),藍線是人工的(僅為了可視化),黑色方塊是評估表面(曲面細分評估着色器的結果)。 如果您在鑲嵌細分評估之前嘗試將其可視化,那么您的補丁將只是紅點,您可能會有一段時間試圖理解它們。

暫無
暫無

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

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