私はクワッドを画面に描画する単純な頂点配列を持っています。OpenGL 2D投影行列の問題
glViewport(0, 0, screenWidth, screenHeight);
// Load shaders
...
GLfloat vertices[] = {
0.0f, 1.0f,
1.0f, 0.0f,
0.0f, 0.0f,
0.0f, 1.0f,
1.0f, 1.0f,
1.0f, 0.0f
};
GLuint vao, vbo;
glGenVertexArrays(1, &vao);
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glBindVertexArray(vao);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 2 * sizeof(GLfloat), (GLvoid*)0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
...
glUseProgram(program);
glUniform3f(glGetUniformLocation(program, "spriteColour"), colour.x, colour.y, colour.z);
glBindVertexArray(vao);
glDrawArrays(GL_TRIANGLES, 0, 6);
glBindVertexArray(0);
次の単純な頂点シェーダとフラグメントシェーダを使用します。
#version 330 core
layout (location = 0) in vec2 vertex;
void main()
{
gl_Position = vec4(vertex.xy, 0.0, 1.0);
}
#version 330 core
out vec4 color;
uniform vec3 spriteColour;
void main()
{
color = vec4(spriteColour, 1.0);
}
これはまさに私の予想通りです。ウィンドウの右上隅に四角形を描画します。
ここで、単純なモデルと投影行列を追加します。しかし、私がいない私は、これは、画面の左上に100×100のクワッドをレンダリングすることを期待する私は、正投影行列を使用していますし、私のモデル行列は、わずか100×100
glm::mat4 projection = glm::ortho(0.0f, (GLfloat)screenWidth, (GLfloat)screenHeight, 0.0f, -1.0f, 1.0f);
glUniformMatrix4fv(glGetUniformLocation(shader, "projection"), 1, GL_FALSE, glm::value_ptr(projection));
...
glm::mat4 model;
model = glm::scale(model, glm::vec3(100.0f, 100.0f, 1.0f));
glUniformMatrix4fv(glGetUniformLocation(program, "model"), 1, GL_FALSE, glm::value_ptr(model));
...
// Update vertex shader
#version 330 core
layout (location = 0) in vec2 vertex;
uniform mat4 model;
uniform mat4 projection;
void main()
{
gl_Position = projection * model * vec4(vertex.xy, 0.0, 1.0);
}
にクワッドをスケーリング何か参照してください。
どういうわけか私の変換によってクワッドが画面から引き出され、クリップされていると仮定できますか?私はOpen GLでかなり新しいので、ここで何が間違っているか完全にはわからない。私は何度もそれを繰り返してきたし、チュートリアルに基づいて私は(http://learnopengl.com/)それは正しいようです。
誰かが私が間違っていたことについてのアイデアはありますか?
位置計算から投影行列を削除するとどうなりますか?そして、 'glGetUniformLocation(shader、" projection ")'のシェーダーは何ですか? – Mars
間違った投影行列の問題を除外する@Marsの提案を試してください。あなたは同じ出力を見なければなりません。スクリーンは1,1と0-100のクワッドが同じに見えるからです。 – Harish
万一、あなたのコードに 'glEnable(GL_CULL_FACE)'はありましたか? – derhass