11.2 OpenGL可编程顶点处理:细分着色器

细分 Tessellation

Tessellation(细分)是计算机图形学中的一种技术,用于在渲染过程中提高模型表面的几何细节。它通过在原始图元(如三角形、四边形或补丁)之间插入新的顶点和边,对图元进行细化分割,从而生成更复杂、更多细节的几何形状。

在现代图形管线中,细分通常由特定的硬件单元——细分着色器(Tessellation Shader)支持。细分过程通常包括以下阶段:

  1. 控制细分级别:应用可以通过 glPatchParameterfv 等函数来指定每个补丁的默认细分级别,决定如何增加额外的顶点。

  2. 细分控制着色器(Tessellation Control Shader/ Hull Shader):该着色器可以动态地为每个补丁生成不同的细分参数,并重新组织补丁的顶点数据输出到下一个阶段。

  3. 插值器(Tessellator):根据细分控制着色器提供的参数,对输入的图元进行细分操作,生成更多的顶点和新的图元。

  4. 细分评估着色器(Tessellation Evaluation Shader/ Domain Shader):针对插值器生成的每个新顶点运行此着色器,计算其最终的位置和其他属性。

通过细分技术,可以在保持较低内存占用的同时,极大地提高模型表面的视觉细节,尤其是在渲染复杂曲面和大规模场景时,效果尤为显著。

设置OpenGL的曲面细分阶段中的某些参数

void glPatchParameterfv( enum pname, constfloat *values );
  • pname: 该参数指定了要设置哪个参数。当前,仅支持的值为 GL_PATCH_DEFAULT_OUTER_LEVEL 和 GL_PATCH_DEFAULT_INNER_LEVEL,它们分别用于定义补丁的默认外层和内层细分级别。
  • values: 指向浮点数数组的指针。这些值的数量和含义取决于所指定的 pname。对于细分级别,它应该是一个包含四个元素(x,y,z,w)的数组,表示细分级别。

在细分语境下,这些参数决定了当补丁被 GPU 的细分硬件阶段细分时,沿着每个边进行多少段或“细分”。

相关推荐

  1. 11.2 OpenGL编程顶点处理细分着色

    2024-02-10 18:14:02       34 阅读
  2. 11.1 OpenGL编程顶点处理顶点着色

    2024-02-10 18:14:02       38 阅读
  3. 11.3 OpenGL编程顶点处理:几何着色

    2024-02-10 18:14:02       35 阅读
  4. 11 OpenGL编程顶点处理

    2024-02-10 18:14:02       26 阅读
  5. 15.2 OpenGL编程片段处理着色执行

    2024-02-10 18:14:02       29 阅读
  6. 12.3 OpenGL顶点处理:平面着色

    2024-02-10 18:14:02       32 阅读
  7. 15.1 OpenGL编程片段处理:片段着色变量

    2024-02-10 18:14:02       33 阅读
  8. 15.3 OpenGL编程片段处理:片段着色查询

    2024-02-10 18:14:02       34 阅读
  9. 19 OpenGL计算着色

    2024-02-10 18:14:02       26 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-10 18:14:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-10 18:14:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-10 18:14:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-10 18:14:02       20 阅读

热门阅读

  1. 【jQuery——详细讲解】

    2024-02-10 18:14:02       31 阅读
  2. 排序刷题9

    2024-02-10 18:14:02       34 阅读
  3. 深入理解常见的设计模式

    2024-02-10 18:14:02       35 阅读
  4. Linux最佳开发桌面 i3wm

    2024-02-10 18:14:02       32 阅读