opengl - 如何在glsl中计算gl_FragCoord

标签 opengl glsl fragment-shader

好的,在我的 GLSL 片段着色器中,我希望能够计算片段与空间中特定线的距离。

这样做的结果是,我首先尝试在顶点着色器中使用不同的 vec2 集来镜像 gl_FragCoord 中的最终结果:

varying vec2 fake_frag_coord;
//in vertex shader:
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
fake_frag_coord=(gl_ModelViewProjectionMatrix * gl_Vertex).xy;

现在在片段着色器中我期望:

gl_FragCoord.xy==fake_frag_coord

但事实并非如此。管道对 gl_Position 执行什么操作,将其转换为我在 fake_frag_coord 上忽略的 gl_FragCoord

最佳答案

gl_FragCoord 是屏幕坐标,因此您需要有关屏幕尺寸等信息才能根据位置生成它。我认为您生成的 fake_frag_coord 将对应于屏幕上标准化设备坐标中的一个点(-1 到 1)。因此,如果您将特定尺寸的屏幕尺寸乘以一半,然后添加该尺寸,您将获得实际的屏幕像素。

关于opengl - 如何在glsl中计算gl_FragCoord,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1288174/

相关文章:

c++ - 在顶点着色器 OpenGL 3.x 中使用计算观察矩阵

c++ - opengl中对象的旋转

opengl - 为什么我们必须在 OpenGL 中创建窗口后加载纹理?

c++ - OpenGL使用统一缓冲区作为数组

ios - Metal或OpenGLES中的片段着色器中的共享变量

c++ - 片段着色器中的 GLSL 翻译未按预期工作

c++ - OpenGL 代码在一台计算机上运行缓慢(但在其他计算机上则不然)

c++ - 围绕特定轴旋转 gluCylinder()?

java - LWJGL OpenGL Sprite 表

javascript - 三.js 和深度Func