2

inThree.jsを操作するために、を使用して渡された頂点インデックスに組み込まれたgl_VertexIDに問題がありました

ドキュメントによると、OpenGLのすべてのバージョンで動作するため、理由はわかりません

http://www.opengl.org/sdk/docs/manglsl/xhtml/gl_VertexID.xml

私はこの頂点シェーダを使用しています:

        uniform int freqData[64];
        uniform int fftSize;

        in int gl_VertexID;

        void main() {
            vec3 norm = normalize(position);

            int modFFT = mod(gl_VertexID, fftSize);

            vec3 newPosition = norm * float(freqData[modFFT]);

            gl_Position = projectionMatrix * modelViewMatrix * vec4( newPosition, 1.0 );
        }

私が受け取るエラーは次のとおりです。

ERROR: 0:68: 'in' : syntax error

宣言に問題があるようで、in他に文句はありません (エラー コンソールは複数のコンパイル エラーを検出できます)。

昨日の Three.js ビルドで作業しています。

4

2 に答える 2

8

私の知る限り、WebGL では組み込みの頂点インデックスにアクセスできません。

ただし、組み込みのインデックス ストリームと同等の値に設定された独自のカスタム属性ストリームを提供することで、これをエミュレートできるはずです。

three.js には整数のカスタム属性がまだ実装されていないため、float 属性を使用する必要があります。

この例で「変位」属性を確認します。

http://mrdoob.github.com/three.js/examples/webgl_custom_attributes.html

于 2012-07-25T22:34:22.467 に答える
7

まず、宣言する必要はありませんgl_VertexID。存在するか(OpenGL ES 2.0上に構築されたWebGLはこれをコア機能として提供しないため、拡張機能のおかげで)、存在しないかのどちらかです。

in次に、OpenGL ES 2.0上に構築されたWebGLは、out構文を使用しません。これは、デスクトップOpenGL3.0以降用です。GLSLESは古いattribute構文を使用します。したがって、宣言する必要がある場合でも(また、宣言する必要がない場合でも)、それをではなく、gl_VertexIDと呼ぶ必要があります。attributein

于 2012-07-25T20:33:52.477 に答える