私はOpenGLES 2.0を初めて使用し、次の最も単純なシェーダーを理解できません。
attribute vec4 vPosition;
void main()
{
gl_Position = vPosition;
}
私の質問は、位置は(x, y, z)
のベクトルになるので、なぜgl_Positionがvec3ではなくvec4なのかということです。
Vec4(x、y、z、w)のwはクリッピングに使用され、線形代数変換が位置に適用されている間、その役割を果たします。
デフォルトでは、これは1.0に設定する必要があります。
詳細についてはこちらをご覧ください:http://web.archive.org/web/20160408103910/http://iphonedevelopment.blogspot .com/2010/11/opengl-es-20-for-iOS-chapter-4.html
クリップスペースで直接シェーダーに頂点を指定する場合は、x、y、zを渡して、そのシェーダーのwコンポーネントとして1を追加するだけです。
attribute vec3 vPosition; // vec3 instead of vec4
void main()
{
gl_Position = vec4 (vPosition, 1.0);
}