当我使用Tessellation着色器时,我是否必须从我的CPU程序补丁而不是三角形传递?
glDrawArrays(GL_PATCHES, 0, 3); //Works with Tess Shaders
glDrawArrays(GL_TRIANGLES, 0, 3); //Works not with Tess Shaders
Run Code Online (Sandbox Code Playgroud)
什么是补丁完全可视化它?它可以是一个被细分的三角形吗?
补丁只是一个没有真正内在结构的点的集合......你的TCS和TES是有意义的.与GL_TRIANGLES(由3个顶点严格定义)不同,GL_PATCHES每个补丁没有预定义的顶点数.您可以使用以下方法自行设置补丁中的顶点数:
glPatchParameteri ?(GL_PATCH_VERTICES??, N);
// where N is some value less than GL_MAX_PATCH_VERTICES
Run Code Online (Sandbox Code Playgroud)
然后,N绘制的每个顶点都定义了一个新的补丁基元.
补丁实际上只是用于评估曲面的控制点的集合.这就是为什么有一个可选的阶段Tessellation Control Shader,它将数据提供给a Tessellation Evaluation Shader.如果没有关于您正在评估的表面类型的更多详细信息,可视化它们的唯一方法是作为点云(例如GL_POINTS).

红点是控制点(顶点GL_PATCHES),蓝线是人工的(仅为了可视化),黑色方块是评估表面(曲面细分评估着色器的结果).如果你试图在曲面细分评估之前想象这一点,那么你的补丁将只是红点,你会有一点时间试图弄清楚它们.
| 归档时间: |
|
| 查看次数: |
1269 次 |
| 最近记录: |