0

oes_texture_float 拡張機能を使用しないように、このフラグメント シェーダを変更することはできますか? webglアニメーションを実行するはずのマシンでエラーが発生するためです。

three.js webglrenderer とシェーダーマテリアルが適用された立方体を使用してシーンをセットアップしました。私の macbook pro ではすべて正常に動作しますが、一部の Windows マシンでは「float textures not supported」というエラーが表示されます (検索したところ、これはおそらく 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」

4

2 に答える 2

1

「それとも私は完全に要点を逃していますか?」-確かにあなたはそうです。シェーダーは、基になるテクスチャ形式を気にしないため(投稿したシェーダーではテクスチャを使用しません!)、問題とは何の関係もありません。

どこかでフロートテクスチャを使用するアプリケーションコードであり、それに応じて変更する必要があります。しかし、シェーダーがテクスチャをまったく使用していないという事実から(そして、他の場所でフロートテクスチャを明示的に作成していないと思います)、おそらくレンダリングターゲットとして、どこかにフロートテクスチャが必要なのはおそらくthree.jsの内部です。したがって、可能であれば、この要件を無効にする方法を探す必要があります。

于 2012-07-09T13:12:26.013 に答える
0

three.js ismでない限り、頂点シェーダーでprojectionMatrix、、modelViewMatrixを定義していません。position

追加してみてください

uniform mat4 projectionMatrix;
uniform mat4 modelViewMatrix;
attribute vec4 position;

最初のシェーダーの上部に?

于 2012-07-09T16:15:46.560 に答える