【发布时间】:2022-01-18 20:50:45
【问题描述】:
我正在 THREE.js(我的第一个着色器)中实现 palette cycling 着色器。
到目前为止一切正常,但我在以下事实中苦苦挣扎:
- 无法将动态大小的
pixels数组传递到片段着色器中 - 无法将动态大小的
palette colors数组传递到片段着色器中
完整示例: https://jsfiddle.net/dangarfield/Le4t7w60/265/
uniform int w;
uniform int h;
uniform int paletteSize;
uniform int[12] pixels; // Has to be fixed
uniform vec4[3] colors; // Has to be fixed
varying vec2 vUv;
vec4 getPixelColorFromPalette (int pixelIndex, int[12] pixels, vec4[3] colors) {
return colors[pixels[pixelIndex]];
}
void main() {
float wF = float(w);
float hF = float(h);
vec2 xyPos = floor(vec2(vUv.x*wF,hF-vUv.y*hF));
int pixelIndex = int((wF * xyPos.y) + (xyPos.x));
vec4 color = getPixelColorFromPalette( pixelIndex, pixels, colors );
gl_FragColor = color;
}
关于如何优化它以便我不必被固定数组大小限制的任何想法?
谢谢
【问题讨论】:
标签: three.js shader fragment-shader