GLSL:找不到我的自定义函数

标签 glsl webgl three.js

所以我有这个片段着色器,它工作得很好,直到我将一些逻辑重构为一个单独的函数。我希望能够多次调用它,将不同版本的效果叠加在一起。

但是,一旦我创建了这个自定义函数,着色器就开始抛出错误:

ERROR: 0:33: 'grid' : no matching overloaded function found 

这很奇怪,因为它似乎将其编译为函数。如果我从 grid() 中删除 return 我也会收到此错误:

ERROR: 0:36: '' : function does not return a value: grid

那么关于声明函数我错过了什么?

此处为完整着色器:

uniform float brightness;
uniform float shiftX;
uniform float shiftY;

uniform vec4 color;
varying vec3 vPos;

void main() {
  gl_FragColor = vec4( grid(200.0), 0.0, 0.0, 1.0 );
}

float grid(float size) {
  float x = pow(abs(0.5 - mod(vPos.x + shiftX, 200.0) / 200.0), 4.0);
  float y = pow(abs(0.5 - mod(vPos.y + shiftY, 200.0) / 200.0), 4.0);
  return (x+y) * 5.0 * pow(brightness, 2.0);
}

最佳答案

您必须将网格函数放在 main 函数之前,或者像在 c 中一样向前声明它。

如:

float grid(float size);

在主方法之前。

关于GLSL:找不到我的自定义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12864203/

相关文章:

android - 黑白模式负片滤镜

javascript - WebGL 在页面上崩溃时的事件?

javascript - 重用几何会导致间歇性的 THREE.JS 纹理错误

javascript - 适用于 WebGL 或 Flash 的虚拟人库

javascript - THREE.js 制作背景中有其他对象的透明对象

javascript - 如何在 Three.js 中不在 Canvas 上实际渲染场景的情况下获取场景的像素数据?

javascript - three.js 中 STL 对象的边界框

python - 如何创建一个 numpy 数组来描述三角形的顶点?

c++ - 为什么在使用 OpenGL 编译顶点着色器时会出现着色器编译器错误 #143、#160 和 #216?

c++ - 使用像素坐标的 OpenGL 子图像