当我使用曲面细分着色器时,我是否必须从 CPU 程序补丁而不是三角形传递?
glDrawArrays(GL_PATCHES, 0, 3); //Works with Tess Shaders
glDrawArrays(GL_TRIANGLES, 0, 3); //Works not with Tess Shaders
究竟什么是 Patch 来可视化它?它可以是一个被细分的三角形吗?
补丁只是点的集合,没有真正的内在结构......你的 TCS 和 TES 才是它们的意义所在。不像GL_TRIANGLES
(由 3 个顶点严格定义),GL_PATCHES
每个面片没有预定义的顶点数。您可以使用以下命令自行设置面片中的顶点数:
glPatchParameteri (GL_PATCH_VERTICES, N);
// where N is some value less than GL_MAX_PATCH_VERTICES
那么,每N
-绘制的许多顶点定义了新的面片基元。
面片实际上只是用于评估表面的控制点的集合。这就是为什么有一个optional阶段称为Tessellation Control Shader
将数据提供给Tessellation Evaluation Shader
。如果没有有关您正在评估的表面类型的更多详细信息,将其可视化的唯一方法是将其作为点云(例如,点云)。GL_POINTS
).
Update:
假设您正在讨论一个贝塞尔曲面 http://en.wikipedia.org/wiki/B%C3%A9zier_surface,那么控制点可以这样可视化:
红点是控制点(图中的顶点GL_PATCHES
),蓝线是人造的(只是为了可视化),黑色方块是评估的表面(曲面细分评估着色器的结果)。如果您在曲面细分评估之前尝试将其可视化,那么您的补丁将只是红点,并且您将花费大量时间来尝试理解它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)