opengl - 顶点着色器的哪些输出变量将被插值?

标签 opengl shader render fragment-shader vertex-shader

我注意到,当进入片段着色器in vec4 vertexColor时,顶点着色器中的out vec4 vertexColor变量将被插值。我的问题是,所有带有“out”修饰符的变量都会被插值还是仅某种类型?

最佳答案

全部用户定义inputs to the fragment shader被插值。 如何对它们进行插值取决于layout interpolation qualifier 。默认情况下,in 将使用 smooth,但您可以指定 noperspective(在屏幕空间中插值,不进行透视校正)或 flat。后者通过为所有片段赋予分配给 provoking vertex of the primitive 的变量值来执行“插值”。 。 FS 输入的整型必须使用 flat,但默认仍然是 smooth,因此如果不显式指定 flat,将会出现编译错误 为他们。

请注意,当您询问顶点着色器输出时,答案是关于片段着色器输入。这是有原因的。

首先,片段着色器之前可以存在多个着色器阶段。给FS的值来自最后一个事件的vertex processing shader stage :几何着色器、曲面分割评估着色器或顶点着色器。网格着色器(一个相对较新的扩展)改变了存在的顶点处理阶段,但最后一个仍然是为片段着色器提供数据的阶段。

所以仅仅谈论“顶点着色器”是不完整的。

其次,顶点处理阶段输出上的插值限定符将被忽略。唯一重要的是片段着色器输入上的那些。就 GLSL 版本号而言,这是一个相对较新的更改。在 GLSL 4.30 之前,最终的顶点处理阶段输出需要与相应的片段着色器输入具有相同的限定符。从 4.30 开始,它们不再需要,但顶点输出限定符会被忽略;只有片段着色器输入限定符才重要。

关于opengl - 顶点着色器的哪些输出变量将被插值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75844645/

相关文章:

c++ - 在每次移动过程中在 Opengl 中制作游戏时形成额外对象

c++ - Openframeworks 全局照明

visual-studio-2013 - VS2013 : Compiling Shaders with Shader Model 5. 0

javascript - 为什么 WebGL 使用 GLSL 代码块的字符串表示?

opengl - GLSL 中是否有用于 AND 的内置函数,或者是否有一些优化的方法来执行组件明智的 AND?

c++ - 在 Windows 上创建并行离屏 OpenGL 上下文

python - 3D 纹理的 OpenGL 4.2+ 和 shader_image_load_store 不起作用?

render - 在 D3D11 中更改单个状态设置

java - 表格 :errors not displaying errors on JSP in Spring

ajax - 更新从另一个 Controller 呈现的 View 内的模板