Javascript 在WebGL着色器中使用UInt8Array数据
HTML FFT音频分析器将其数据输出为UINT32阵列(64)类型 根据three.js文档,不支持此数据类型: 如何以廉价的方式将每帧FFT缓冲区数据放入顶点着色器 由于不兼容,我无法编译着色器 任何帮助,建议,谢谢Javascript 在WebGL着色器中使用UInt8Array数据,javascript,glsl,webgl,three.js,Javascript,Glsl,Webgl,Three.js,HTML FFT音频分析器将其数据输出为UINT32阵列(64)类型 根据three.js文档,不支持此数据类型: 如何以廉价的方式将每帧FFT缓冲区数据放入顶点着色器 由于不兼容,我无法编译着色器 任何帮助,建议,谢谢 attributes = { customColor: { type: "c", value: [] }, tick: { type: "f", value: 1.0 } };
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()循环中:
和GLSL v-shader:
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 );
}
我添加了新的统一类型“iv1”,以便能够传入整数数组。你可以试试:
非常感谢您的帮助!我在MacOSX10.7.4(Lion)上的OpenGL版本有各种各样的问题<代码>错误:0:75:“mod”:未找到匹配的重载函数请参见此处:我已尝试将
#版本140
添加到着色器,但它必须显示在着色器的顶部。在哪里可以加上这个?我得到了同样的错误。尝试将mod与同一类型的所有参数一起使用,当前您调用mod(float,int),因此可以使用mod(int,int)或mod(float,float)。
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 );
}