opengl - 片段着色器如何确定顶点着色器输出的片段数量?

标签 opengl glsl shader fragment-shader vertex-shader

我熟悉顶点和片段着色器,但仍然对片段着色器如何确定顶点着色器输出中的片段数量感到困惑。

如果我有 3 个顶点,并且在 GLSL 中绘制一个三角形基元,则顶点着色器将为每个顶点运行三次,然后片段着色器将运行多次(取决于片段数量,每个片段运行一次)。

我想知道片段着色器是如何确定片段的?它使用 gl_Position 吗?如果我没有在顶点着色器中设置 gl_Position,片段着色器是否仍然能够生成片段?

顶点着色器中每次都必须设置gl_Position吗?

最佳答案

您正在谈论光栅化中称为扫描转换的步骤。 GPU 获取顶点着色器生成的位置并插入它们的属性以生成传递到片段着色器的片段。所以,是的,在顶点着色器中设置 gl_Position 是非常重要的。

将三角形的坐标转换为窗口坐标后,扫描转换会获取该三角形,并根据该三角形覆盖的输出图像上的窗口像素的排列将其分解。 Source.

scan conversion of a triangle

关于opengl - 片段着色器如何确定顶点着色器输出的片段数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27069881/

相关文章:

cocoa - NSOpenGLContext 用于非绘图目的

ios - iPhone 6 Plus 上的 GLSL atan 给出了错误的结果

c++ - 使用 GLSL 直接在着色器中从位置计算平移矩阵

three.js - 让阴影在 Three.js 自定义着色器中工作

android - 使用 OpenGL 着色器模拟调色板交换(在 LibGDX 中)

c++ - OpenGL 中的访问冲突

c++ - opengl Obj模型加载

c++ - 在 OpenGL 中的一个输入纹理上使用多个sampler2D

javascript - 如何从被 GLSL 着色器置换的 Three.js 几何体中导出 OBJ?

javascript - 如何在 Three.js 中仅渲染透明对象的最近深度级别?