5

私はコンテキスト「#version330コア」であるこのコードを持っています

gl_Position =           PerspectiveViewMatrix(90.0, AspectRatio, 0.01, 1000.0  )


                        *    TranslationMatrix(0, 0, -4 -0.35*MouseWheel)        


                        *    RotationMatrix(MouseMovement.y, X_AXIS)        
                        *    RotationMatrix(-MouseMovement.x, Y_AXIS)    
                        *    RotationMatrix(float(Strafing*3), Z_AXIS)    


                        *    TransformationMatrix

                        *    in_Vertex;

そのどの部分が古いgl_ModelViewMatrixで、どの部分がgl_ModelViewProjectionMatrixですか?(ModelViewProjectionの作成に使用されたgl_ProjectionMatrixとは何ですか?)

4

1 に答える 1

5

私はGLSL3.3にあまり精通していませんが、PerspectiveViewMatrix(builin機能でさえありますか?)は、古い組み込みのgl_ProjectionMatrixを置き換えるマトリックスを構築しているに違いありません。

gl_ModelViewMatrixは一般に、ワールド空間でのオブジェクトの変換行列とそれ自体の「ローカル」変換の積であるため、TranslationMatrix、RotationMatrix、およびTransformationMatrixの積として定義できます。


すべての行列を、たとえばユニフォームとして、自分でシェーダーに送信する必要があります。これらのマトリックスは、自分で作成する必要があります(GLMを使用するなど)。射影行列の怠惰な例:

// in your app

std::array<GLfloat, 16> projection;

glMatrixMode(GL_PROJECTION);
glPushMatrix();
gluOrtho(...);
glGetFloatv(GL_PROJECTION_MATRIX, projection.data());
glPopMatrix();

glUniformMatrix4fv(glGetUniformLocation(ShaderProgramID, "ProjectionMatrix"), 1, GL_FALSE, projection.data());

// in vertex shader

uniform mat4 ProjectionMatrix;
in vec4 InVertex;

void main() {
    gl_Position = ProjectionMatrix * InVertex;
}
于 2010-09-18T11:10:56.300 に答える