私は単純な頂点シェーダーを持っています
#version 330 core
uniform mat4 projectionMatrix;
uniform mat4 viewMatrix;
uniform mat4 modelMatrix;
in vec3 in_Position;
out vec3 pass_Color;
void main(void)
{
//gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(in_Position, 1.0);
gl_Position = vec4(in_Position, 1.0);
pass_Color = vec3(1,1,1);
}
私のクライアントコードでは
glm::vec4 vec1(-1,-1,0,1);//first
glm::vec4 vec2(0,1,0,1);//second
glm::vec4 vec3(1,-1,0,1);//third
glm::mat4 m = projectionMatrix * viewMatrix * modelMatrix;
//translate on client side
vec1 = m * vec1;
vec2 = m * vec2;
vec3 = m * vec3;
//first vertex
vertices[0] = vec1.x;
vertices[1] = vec1.y;
vertices[2] = vec1.z;
//second
vertices[3] = vec2.x;
vertices[4] = vec2.y;
vertices[5] = vec2.z;
//third
vertices[6] = vec3.x;
vertices[7] = vec3.y;
vertices[8] = vec3.z;
ここで私の質問は、シェーダーで行列乗算を使用せず、クライアント コードで使用しない場合、画面全体をストレッチする素敵な三角形をレンダリングするので、頂点シェーダーが座標系で画面に与えられた座標をマップしx=-1..1
、y=-1..1
シェーダーで行列乗算を行うと、すべてがうまく機能します。しかし、示されているようにシェーダーのコードをコメントアウトしてクライアントで実行すると、奇妙な結果が得られます。それは同じ結果をもたらすべきではありませんか?
gl_Position
頂点シェーダーの出力が 2D 座標であるにもかかわらず、間違っていると思いましたvec4
か?
助けてくれてありがとう。頂点シェーダーの出力が頂点位置に関して正確に何であるかを理解したいと思っています。