私は、OpenGL ES 2.0に新しいですし、次の最も簡単なシェーダを理解することはできません。OpenGL ES 2.0用のvec3はなぜgl_Positionですか?
attribute vec4 vPosition;
void main()
{
gl_Position = vPosition;
}
私の質問は、位置が(x, y, z)
のベクトルになりますので、なぜgl_Positionではなくvec3のvec4ですか?
私は、OpenGL ES 2.0に新しいですし、次の最も簡単なシェーダを理解することはできません。OpenGL ES 2.0用のvec3はなぜgl_Positionですか?
attribute vec4 vPosition;
void main()
{
gl_Position = vPosition;
}
私の質問は、位置が(x, y, z)
のベクトルになりますので、なぜgl_Positionではなくvec3のvec4ですか?
vec4(x、y、z、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を渡すと、そのシェーダでワットコンポーネントとして1を追加することができます。
attribute vec3 vPosition; // vec3 instead of vec4
void main()
{
gl_Position = vec4 (vPosition, 1.0);
}
このスレッドでは、いくつかの良い説明があります。http://www.gamedev.net/topic/506162-3d-math-4-component-vectors/ – Tim