だから私はいくつかのOpenGLを学んでいる、それを取り入れることはたくさんあるし、初心者にすぎないが、GLSLの「レイアウト修飾子」を理解していない。
だからこのようなもの:
layout (location = 0) in vec3 position;
次のような単純な頂点シェーダーで:
#version 330 core
layout (location = 0) in vec3 position; // The position variable has attribute position 0
out vec4 vertexColor; // Specify a color output to the fragment shader
void main()
{
gl_Position = vec4(position, 1.0); // See how we directly give a vec3 to vec4's constructor
vertexColor = vec4(0.5f, 0.0f, 0.0f, 1.0f); // Set the output variable to a dark-red color
}
たとえば、out vec4を理解しています(それはフラグメントシェーダーに行くためです)。そして、例えばvertexColorは理にかなっています。
しかし、「位置」を理解していないのかもしれませんが、この意味で正確に何を意味するのでしょうか?誰か説明したいですか? opengl wikiは正直私を助けませんでした。
しかし、おそらく頂点シェーダーと誤解しているかもしれません(もちろん、パイプラインについてはまだ少しわかりません)。しかし、私の理解から、頂点仕様は私たちが最初に修正することですか? (必要に応じて頂点/インデックス)、これらをVAOに格納します。
それで、頂点シェーダーは個々の頂点ポイントと相互作用していますか? (私は願っています)それが私がそれを理解した方法だからです?
そうです、頂点シェーダーは各頂点に対して実行されます。
頂点は、いくつかの属性(位置、法線、テクスチャ座標など)で構成されます。
VAOを作成するときのCPU側では、「このバッファー内のこのデータは属性0、その隣のデータは属性1などになる」と言って各属性を記述します。 VAOは、どこに誰のこの情報のみを保存することに注意してください。実際の頂点データはVBOに格納されます。
頂点シェーダーでは、レイアウトと位置のある行は、「属性0を取得して位置と呼ばれる変数に配置する」とだけ言っています(locationは属性の数を表します)。
2つのステップが正しく行われている場合は、positionという名前の変数内の位置になるはずです:)明確ですか?