-1

頂点シェーダーの頂点内のすべての頂点に対して単一の変数を維持することは可能ですか。つまり、最初の頂点にアクセスしている間の変数の更新は、2 番目の頂点にアクセスしているときに反映されるはずです....

4

2 に答える 2

2

頂点シェーダーの考え方は、少なくともハードウェアがサポートできる範囲で、すべての頂点のすべてのシェーダーが多かれ少なかれ同時に実行されるというものです。

したがって、「最初の頂点にアクセスしている間に変数を更新すると、2 番目の頂点にアクセスしている間に反映されるべきである」という全体的な考えは意味がありません。2 番目の頂点が最初の頂点の前に処理される可能性があります。

于 2012-05-10T17:20:04.973 に答える
0

次のように、シェーダーで一様変数を宣言する必要があります。

uniform vec3 lightDir;

次に、C/C++ からの値をそこに渡します。

glUseProgram(shader_id)
GLint location = glGetUniformLocation(shader_id, "lightDir");
    if(location != -1)glUniform3f(location, x,y,z);

編集:

ジオメトリ シェーダーで頂点を反復処理し (gl_VerticesIn のループ)、頂点ごとのデータを設定できます。http://www.lighthouse3d.com/tutorials/glsl-core-tutorial/geometry-shader-examples/

于 2012-05-10T14:22:15.340 に答える