一个HTML FFT音频分析器将其数据输出到一个UInt32Array(64)类型中。
根据three.js文档,该数据类型不受支持:https://github.com/mrdoob/three.js/wiki/Uniforms-types 如何以一种便宜的方式将每帧FFT缓冲区数据传递到我的顶点着色器中?
由于不兼容性,我无法编译着色器。
任何帮助、建议都会被赞赏。
根据three.js文档,该数据类型不受支持:https://github.com/mrdoob/three.js/wiki/Uniforms-types 如何以一种便宜的方式将每帧FFT缓冲区数据传递到我的顶点着色器中?
由于不兼容性,我无法编译着色器。
任何帮助、建议都会被赞赏。
attributes = {
customColor: { type: "c", value: [] },
tick: { type: "f", value: 1.0 }
};
uniforms = {
amplitude: { type: "f", value: 5.0 },
opacity: { type: "f", value: 0.3 },
color: { type: "c", value: new THREE.Color( 0xff0000 ) },
fftSize: { type: "i", value: 63 },
freqData: { type: "fv1", value: freqByteData }
};
...
在 render() 循环中:
freqByteData = new Uint8Array(analyser.frequencyBinCount);
analyser.getByteFrequencyData(freqByteData)
uniforms.freqData = freqByteData;
以及GLSL顶点着色器:
uniform float freqData[64]; // not working, primitive type conflict
uniform int fftSize;
uniform float amplitude;
attribute vec3 customColor;
attribute int tick;
varying vec3 vColor;
void main() {
vec3 norm = normalize(position);
vec3 newPosition = position * freqData[tick % fftSize] + amplitude;
vColor = customColor;
gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
}
ERROR: 0:75: 'mod' : no matching overloaded function found
,请参见此处:http://theworldmoves.me/graphics/fft_1.html - Alex#version 140
添加到着色器中,但它必须出现在着色器的顶部。它应该添加在哪里? - Alex