opengl - GLSL 获取屏幕上片段的位置

标签 opengl glsl shader

我正在尝试使用 GLSL 1.00 访问片段着色器中视口(viewport)中的片段位置,在 3.30 中我可以通过传递“vec2(gl_MultiTexCoord0);”来做到这一点作为从顶点着色器到片段着色器的变化。有谁知道是否可以做到这一点?

最佳答案

这里有一些值得注意的事情:

  1. 您可以在 GLSL3.30 中使用相同的原理。用于在顶点和片段着色器之间进行通信的 variing 关键字已被更通用的 in/out concpet 所取代,您可以使用它来将值传递给下一个着色器阶段(在您的程序中)。

  2. GLSL1.00 并不真正存在。第一个真正的版本是1.10。如果您指定#version 100,您将获得 GL ES SH 1.0(GLES 2.0 自带的)。

  3. gl_MultiTexCoord0 是一个已弃用的内置函数,它在 core 配置文件/core 版本着色器中不可用。您应该为此使用通用顶点属性。

  4. 任何版本的 GLSL 都支持内置的 gl_FragCoord 变量,该变量可以让您访问片段的屏幕空间坐标,因此这些东西都不是真正必要的。不过,您可能希望位置在 [0,1] 范围内(适合纹理),因此使用一些 texcoord 属性可能仍然是可行的方法。 OTOH,仅将视口(viewport)大小指定为统一的 vec2 可能仍然更有效,特别是如果您实际上在 CPU 上反转一次,这样这将归结为每个片段一次向量乘法。 p>

关于opengl - GLSL 获取屏幕上片段的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24621093/

相关文章:

opengl - gluPerspective、glViewport、gluLookAt 以及 GL_PROJECTION 和 GL_MODELVIEW 矩阵

c++ - obj + mlt 3d 模型呈现错误的颜色

c++ - 在循环中显示 glutDisplayFunc 函数

shader - Metal:如何将图像附加到着色器而不进行颜色/ Gamma 转换?

c# - 将字节数组设置为unity texture2d的快速方法

opengl - 如何使用 OpenGL 将 2d 艺术分解成三角形

c++ - OpenGL 3.1 使用索引绘图发布渲染纹理

c# - glGetUniformLocation 对于结构中的 2/4 字段失败?

c++ - opengl-glsl单虚光

c++ - 使用几何着色器创建新的图元类型