我读过一些关于Cg的教程,但有一点不太清楚。 顶点和片段着色器之间究竟有什么区别? 什么情况比另一个更适合?顶点着色器和片段着色器
回答
片段着色器与像素着色器相同。
一个主要区别是顶点着色器可以操纵顶点的属性。这是你的多边形的角点。
另一方面,片段着色器负责处理顶点之间的像素。它们按照特定规则在定义的顶点之间进行插值。
例如:如果您希望多边形完全呈红色,则可以将所有顶点定义为红色。如果你想要像顶点之间的渐变那样的特定效果,你必须在片段着色器中做到这一点。
换句话说:
顶点着色器是在图形管道的早期步骤的一部分,模型之间的某处坐标变换和多边形裁剪,我认为。那时,还没有什么真的完成。
但是,片段/像素着色器是光栅化步骤的一部分,在该步骤中计算图像并在顶点之间填充或“着色”像素。
刚刚看了一下这里的图形管线,一切都将显露出来: http://en.wikipedia.org/wiki/Graphics_pipeline
顶点着色器在每个顶点完成,而片段着色器在每个像素上完成。片段着色器在顶点着色器之后应用。关于着色器GPU管线的更多信息link text
在通过3D硬件渲染图像,你通常有一个网格(点,多边形,线),这是由顶点定义。要单独操纵顶点,通常用于模型中的运动或海洋中的波浪,可以使用顶点着色器。这些顶点可以具有由纹理指定的静态颜色或颜色,以处理您使用片段着色器的顶点颜色。在视图到达屏幕的末尾,您还可以使用片段着色器。
“单独操作顶点通常用于模型中的运动或海洋中的波浪” - 因为这可能是正确的,所以这适合于在顶点着色器之后和在像素/片段着色器之前的几何着色器。 – Placeable 2013-05-30 08:17:50
顶点变换是在图形硬件流水线中的第一处理级。顶点变换对每个顶点执行一系列数学运算。这些操作包括将顶点位置转换为供光栅化器使用的屏幕位置,为纹理化生成纹理坐标,并点亮顶点以确定其颜色。
栅格化的结果是一组像素位置以及一组碎片。基元具有的顶点数量与栅格化时生成的片段数量之间没有关系。例如,由三个顶点组成的三角形可能占据整个屏幕,因此会生成数百万个片段!
早些时候,我们告诉过你,如果你不确切知道片段是什么,就把片段想象成一个像素。然而,在这一点上,片段和像素之间的区别变得重要。术语“像素”是“像素”的缩写。“像素代表特定位置的帧缓冲区内容,例如颜色,深度和与该位置相关的任何其他值。片段是可能需要更新特定像素的状态。
术语“片段”是因为光栅化打碎每个几何图元,例如三角形,到每个象素,所述基元覆盖的像素大小的片段。片段具有相关联的像素位置,深度值,和一组这样的内插参数的作为颜色,二次(镜面)的颜色,和一个或多个纹理坐标集。这些各种内插参数从变换的顶点组成得出的特定的几何图元用于产生片段。你可以把一个片段作为的“潜在像素”。如果片段通过各种光栅化测试(在光栅操作中) ons stage),片段更新帧缓冲区中的一个像素。
顶点着色器和片段着色器都是不使用固定管线渲染的3D实现的特性。在任何3-D渲染中,顶点着色器都在片段/像素着色器之前应用。
顶点着色器在每个顶点上运行。如果您有一个固定的多边形网格,并且您想在着色器中对其进行变形,则必须在顶点着色器中实现它。顶点着色器中的任何物理变化都可以在顶点着色器中完成。
片段着色器从顶点着色器获取输出并将颜色,像素的深度值等相关联。在这些操作之后,帧将发送帧缓冲以在屏幕中显示。
一些操作,例如照明计算时,u可以在顶点着色器执行以及freagment着色器。但是碎片着色器比顶点着色器提供更好的结果。
- 1. GLSL:顶点着色器无片段着色片段着色器
- 2. 无法将顶点着色器中的颜色传递给片段着色器
- 3. OpenGL - 顶点着色器颜色没有传递给片段着色器
- 4. 从顶点着色器传递一个浮动的片段着色器
- 5. 片段着色器不能读取顶点着色器'colorVarying'的输出
- 6. 着色器程序到节点+片段着色器
- 7. OpenGL片段着色器VS DirectX片段着色器
- 8. Matrix.CreateRotation VS顶点着色器
- 9. 顶点着色器问题
- 10. 从顶点着色器
- 11. 创建使用OpenGL和顶点和片段着色器
- 12. AS3 Stage3D片段着色器?
- 13. 表面着色器中的统一着色器顶点格式
- 14. webgl中的顶点和片段着色器值
- 15. 损坏的顶点和片段着色器
- 16. 如何使顶点和片段着色器在three.js中工作
- 17. iOS上的OpenGL ES 2:空片段和顶点着色器
- 18. 从顶点和片段着色器中删除法线
- 19. 顶点着色器与顶点
- 20. 片段着色器如何确定顶点着色器输出中片段的数量?
- 21. 从几何着色器的片段着色器
- 22. 将表面着色器转换为片段着色器
- 23. 片段着色器:在着色器中没有统一名称
- 24. 顶点着色器和片段着色器在调用gllinkProgram()之前未能编译,
- 25. 我们可以删除顶点和片段着色器链接着色器程序
- 26. 多重采样和片段着色器
- 27. GLSL点燃顶点着色器
- 28. GLSL变量不从顶点传递到片段着色器
- 29. 如何在CPU上运行Cg顶点/片段着色器?
- 30. 带修改顶点的飞机上的片段着色器
谢谢,非常清晰和简明的解释。我想我现在明白了。 – adivasile 2010-12-12 11:04:44
实际上你并不一定要设置顶点属性是红色的:你可以像颜色/栅格化所属的片段着色器那样容易并且更明智地将fragcolor设置为红色。 – RichieHH 2015-09-02 21:32:45