是否可以以某种方式修改此片段着色器,使其不使用 oes_texture_float 扩展?因为我在应该运行 webgl 动画的机器上遇到错误。
我使用 three.js webglrenderer 和一个应用了 shadermaterial 的立方体设置了我的场景。在我的 macbook pro 上,一切正常,但在某些 Windows 机器上,我收到错误“不支持浮动纹理”(我搜索并发现这可能与 oes_texture_float 扩展有关)
所以我猜我需要改变我的片段着色器?还是我完全错过了重点?
<script type="x-shader/x-vertex" id="vertexshader">
// switch on high precision floats
#ifdef GL_ES
precision highp float;
#endif
void main() {
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
}
</script>
<script type="x-shader/x-fragment" id="fragmentshader">
#ifdef GL_ES
precision mediump float;
#endif
#define PI 3.14159265
uniform float time;
uniform vec2 resolution;
float f(float x) {
return (sin(x * 1.50 * PI ) + 19.0);
}
float q(vec2 p) {
float s = (f(p.x + 0.85)) / 2.0;
float c = smoothstep(0.9, 1.20, 1.0 - abs(p.y - s));
return c;
}
vec3 aurora(vec2 p, float time) {
vec3 c1 = q( vec2(p.x, p.y / 0.051) + vec2(time / 3.0, -0.3)) * vec3(2.90, 0.50, 0.10);
vec3 c2 = q( vec2(p.x, p.y / 0.051) + vec2(time, -0.2)) * vec3(1.3, .6, 0.3);
vec3 c3 = q( vec2(p.x, p.y / 0.051) + vec2(time / 5.0, -0.5)) * vec3(1.7, 0.4, 0.20);
return c1+c2+c3;
}
void main( void ) {
vec2 p = ( gl_FragCoord.xy / resolution.xy );
vec3 c = aurora(p, time);
gl_FragColor = vec4(1.0-c, c);
}
</script>
编辑:这与浮点纹理无关,而是与我的片段着色器中的某些东西有关。Three.js 给我错误:“无法初始化着色器,VALIDATE_STATUS”