顶点着色器和片段着色器如何在OpenGL中通信?

西蒙·穆勒(Simon Mueller)

我真的不明白片段着色器是如何工作的。

我知道

  • 顶点着色器每个顶点运行一次
  • 片段着色器每个片段运行一次

由于片段着色器不适用于每个顶点,而是每个片段都不能将数据发送到片段着色器?顶点数量和片段数量不相等。

如何确定哪个片段属于哪个顶点?

为了理解这一点,您需要考虑整个渲染管道。顶点着色器的输出(除了特殊输出gl_Position)作为顶点的“关联数据”传递到管道的下一级。

尽管顶点着色器一次只在一个顶点上工作,根本不关心基元,但管道的其他阶段确实考虑了基元类型(以及顶点连接性信息)。这就是通常所说的“原始程序集”。现在,我们仍然具有由VS生成的相关数据的单个顶点,但是我们也知道将哪些顶点组合在一起以定义基本的图元,例如点(1个顶点),线(2个顶点)或三角形(3顶点)。

在栅格化期间,将为属于图元的输出像素栅格中的每个像素位置生成片段。这样,可以插入定义原始数的顶点的相关数据遍及整个primitive。在一行中,这非常简单:完成了线性插值。让我们将端点A和B分别与一些关联的输出向量v一起调用,这样我们就有v_A和v_B。跨越这条线,我们获得v的内插值,即在每个端点处的v(x)=(1-x)* v_A + x * v_B,其中x在0(在A点)到1(在A点)的范围B)。对于三角形,使用所有3个顶点的数据之间的重心插值。因此,尽管在顶点和片段之间没有1:1映射,但是VS的输出仍然定义FS的相应输入的值,只是不是直接地,而是通过使用的原始类型的插值来间接地定义。

GL中的概念数据着色器流程

到目前为止,我给出的公式有些简化。实际上,默认情况下,实际上通过应用公式修改修正了透视图,从而考虑了透视图的失真效果。这只是意味着插值应该像在对象空间中线性应用那样起作用(在施加投影的失真之前)。例如,如果您有一个透视投影和一些不平行于图像平面的图元,则在屏幕空间中向右移动1个像素确实意味着在实际对象上移动可变的距离,具体取决于实际点到相机平面。

您可以通过noperspectiveGLSL中in/out变量使用限定符来禁用透视校正然后,如我所描述的那样使用线性/重心插值。

您也可以使用flat限定符,它将完全禁用插值。在这种情况下,整个原始图元的所有片段都只使用一个顶点(所谓的“激发顶点”)的值。整数永远不能由GL自动插值,并且必须像flat发送到片段着色器时一样被限定

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

顶点着色器或片段着色器中的OpenGL ES2.0 Lighting

来自分类Dev

OpenGL无法将变量从顶点着色器发送到片段着色器

来自分类Dev

片段着色器如何确定来自顶点着色器输出的片段数?

来自分类Dev

优化片段和顶点着色器之间的操作

来自分类Dev

OpenGL调试,如何查看顶点着色器的结果

来自分类Dev

在OpenGL的顶点着色器中获取元素ID

来自分类Dev

WebGL:是否禁止在顶点着色器和片段着色器中绑定相同的制服?

来自分类Dev

如何在顶点着色器中将VBO数据用作位置数据,在片段着色器中如何将统一数据用作颜色数据

来自分类Dev

如何在 OpenGL 片段着色器中渲染最近的顶点

来自分类Dev

如何从顶点着色器中的vec3获取值?OpenGL 3.3

来自分类Dev

WebGL-丢弃顶点着色器标记的片段

来自分类Dev

在片段着色器和顶点着色器中计算照明的点积之间有区别吗?

来自分类Dev

在glsl 3.3中将浮点数组从顶点着色器传递到片段着色器

来自分类Dev

顶点着色器的OpenGL属性名称

来自分类Dev

OpenGL奇怪的顶点着色器问题

来自分类Dev

OpenGL顶点着色器变换,对象消失

来自分类Dev

OpenGL奇怪的顶点着色器问题

来自分类Dev

如果几何着色器处于活动状态,如何将信息从顶点着色器传递到片段着色器?

来自分类Dev

如何在顶点着色器中获得未变换的位置?

来自分类Dev

OpenGL 4.X的顶点着色器如何处理大量顶点

来自分类Dev

在OpenGL中渲染数据:顶点和计算着色器

来自分类Dev

OpenGL-从顶点着色器访问缓冲区中的下3个顶点

来自分类Dev

GPU如何处理顶点着色器?

来自分类Dev

如何为GPGPU扩展顶点着色器功能

来自分类Dev

顶点着色器的支持程度如何?

来自分类Dev

GPU如何处理顶点着色器?

来自分类Dev

顶点着色器中的边界框

来自分类Dev

无法在Maya插件中编译顶点着色器

来自分类Dev

顶点着色器中对复数的运算

Related 相关文章

  1. 1

    顶点着色器或片段着色器中的OpenGL ES2.0 Lighting

  2. 2

    OpenGL无法将变量从顶点着色器发送到片段着色器

  3. 3

    片段着色器如何确定来自顶点着色器输出的片段数?

  4. 4

    优化片段和顶点着色器之间的操作

  5. 5

    OpenGL调试,如何查看顶点着色器的结果

  6. 6

    在OpenGL的顶点着色器中获取元素ID

  7. 7

    WebGL:是否禁止在顶点着色器和片段着色器中绑定相同的制服?

  8. 8

    如何在顶点着色器中将VBO数据用作位置数据,在片段着色器中如何将统一数据用作颜色数据

  9. 9

    如何在 OpenGL 片段着色器中渲染最近的顶点

  10. 10

    如何从顶点着色器中的vec3获取值?OpenGL 3.3

  11. 11

    WebGL-丢弃顶点着色器标记的片段

  12. 12

    在片段着色器和顶点着色器中计算照明的点积之间有区别吗?

  13. 13

    在glsl 3.3中将浮点数组从顶点着色器传递到片段着色器

  14. 14

    顶点着色器的OpenGL属性名称

  15. 15

    OpenGL奇怪的顶点着色器问题

  16. 16

    OpenGL顶点着色器变换,对象消失

  17. 17

    OpenGL奇怪的顶点着色器问题

  18. 18

    如果几何着色器处于活动状态,如何将信息从顶点着色器传递到片段着色器?

  19. 19

    如何在顶点着色器中获得未变换的位置?

  20. 20

    OpenGL 4.X的顶点着色器如何处理大量顶点

  21. 21

    在OpenGL中渲染数据:顶点和计算着色器

  22. 22

    OpenGL-从顶点着色器访问缓冲区中的下3个顶点

  23. 23

    GPU如何处理顶点着色器?

  24. 24

    如何为GPGPU扩展顶点着色器功能

  25. 25

    顶点着色器的支持程度如何?

  26. 26

    GPU如何处理顶点着色器?

  27. 27

    顶点着色器中的边界框

  28. 28

    无法在Maya插件中编译顶点着色器

  29. 29

    顶点着色器中对复数的运算

热门标签

归档