2

私は単純な頂点シェーダーを持っています

#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..1y=-1..1

シェーダーで行列乗算を行うと、すべてがうまく機能します。しかし、示されているようにシェーダーのコードをコメントアウトしてクライアントで実行すると、奇妙な結果が得られます。それは同じ結果をもたらすべきではありませんか?

gl_Position頂点シェーダーの出力が 2D 座標であるにもかかわらず、間違っていると思いましたvec4か?

助けてくれてありがとう。頂点シェーダーの出力が頂点位置に関して正確に何であるかを理解したいと思っています。

4

1 に答える 1