web-dev-qa-db-ja.com

OpenGL ES 2.0 gl_Position用のvec3を使用しないのはなぜですか?

私はOpenGLES 2.0を初めて使用し、次の最も単純なシェーダーを理解できません。

attribute vec4 vPosition;
void main()
{
   gl_Position = vPosition;
}

私の質問は、位置は(x, y, z)のベクトルになるので、なぜgl_Positionがvec3ではなくvec4なのかということです。

31
peter

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

25
Matisse VerDuyn

クリップスペースで直接シェーダーに頂点を指定する場合は、x、y、zを渡して、そのシェーダーのwコンポーネントとして1を追加するだけです。

attribute vec3 vPosition; // vec3 instead of vec4
void main()
{
   gl_Position = vec4 (vPosition, 1.0);
}
3
Drout