ウィンドウに静的な三角形を描画する単純なhello-world OpenGLプログラムでは、 三角形の3つの頂点を赤、緑、青の色に設定すると、三角形はグラデーションで塗りつぶされます。頂点シェーダはどのようにカラー情報をフラグメントシェーダに渡しますか?
しかし、私はこのようなシェーダを使用する場合:
バーテックスシェーダを:aVertex
とaColor
が頂点バッファから来ている属性は、glVertexAttribPointer
の呼び出しを通過
attribute vec4 aVertex;
attribute vec4 aColor;
varying vec4 vColor;
void main(void) {
gl_Position = gl_ModelViewMatrix * gl_ProjectionMatrix * aVertex;
vColor = aColor;
}
。
フラグメントシェーダ:
varying vec4 vColor;
void main(void) {
gl_FragColor = vColor;
}
三角形はまだ勾配で満たされ、そしてここで問題になるのは:
頂点シェーダは、頂点ごとに計算されている場合は、vColor
の各インスタンスがなければなりません頂点の色が割り当てられます。頂点の色は、頂点バッファに設定されている赤、緑、青のいずれかでなければなりません。
勾配はどこから来ましたか?
または、別の言葉で言えば、フレッシュシェイダーでは、vColor
がいつ頂点の代わりに補間された色になるのですか?
vecやmatの値が変化する場合の詳細は、https://gamedev.stackexchangeを参照してください。com/questions/139720/glsl-varying-interpolation-component-ws-spec-in-the-spec – trusktr