android - gl_FragCoord 值始终保持静态

标签 android opengl-es glsl

我正在尝试读取 gl_FragCoord x、y 和 z 值并根据它们为我的三角形着色。问题是我的三角形总是呈现黄色。

据我所知,gl_FragCoord 是一个传递给像素着色器以描述“播放头”位置的变量,因此我希望 gl_FragCoord.x/y/z 值发生变化,并且我的三角形将使用某种渐变,但它呈现黄色。我错过了什么?

顶点着色器:

uniform    mat4        uMVPMatrix;
attribute  vec4        vPosition;

void main() 
{
    gl_Position = uMVPMatrix * vPosition;
}

像素着色器:

precision mediump float ;        

void main() 
{
    gl_FragColor = vec4( gl_FragCoord.x, gl_FragCoord.y, gl_FragCoord.z, 1 );
}

最佳答案

gl_FragCoord 给出了窗口像素坐标中的 fragment 位置(窗口,而不是视口(viewport)!):

gl_FragCoord is an input variable that contains the window relative coordinate (x, y, z, 1/w) values for the fragment.

https://registry.khronos.org/OpenGL-Refpages/gl4/html/gl_FragCoord.xhtml

除了屏幕最左下角的像素,gl_FragCoord 为 >= 1

gl_FragColor 期望开放范围 (0, 1) 中的浮点值,并剪裁该范围之外的值。您需要从 gl_FragCoord 中减去视口(viewport)原点的屏幕坐标,然后将差值除以视口(viewport)的宽度/高度。

关于android - gl_FragCoord 值始终保持静态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33509818/

相关文章:

opengl - 来自高度图的法线图

c++ - OpenGL gluLookat 无法使用着色器

Android 操作栏后退按钮自定义和调整大小

android - SetError 在 TextInputLayout 中使用自定义样式产生异常

ios - GLSL 着色器错误 "Constructor calls may not have precision"

java - Android OpenGL ES 2.0 多个对象

Android OpenGL ES 纹理 - alphablending

matrix - GLSL 矩阵/逆乘精度

android - ActionBar 选项卡宽度

android - 无法解析外部依赖项com.android.tools.build:gradle:4.0.1,因为未定义存储库