2016-08-07 184 views
0

我有一個簡單的頂點數組,可以在屏幕上繪製一個四邊形。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

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); 
} 

我希望它可以在屏幕的左上方呈現一個100×100的四,但是我不看到什麼。

我只能假設,我的轉換導致四元組從屏幕上被截斷和剪切?我在Open GL相當新穎,所以我不完全確定這裏有什麼問題。我已經完成了很多次,並且基於我正在使用的教程(http://learnopengl.com/),它似乎是正確的。

有沒有人有任何想法,我做錯了什麼?

+3

如果從位置計算中刪除投影矩陣會發生什麼? 「glGetUniformLocation(着色器,」投影「)」中的着色器是什麼? – Mars

+0

嘗試@Mars建議排除與投影矩陣錯誤有關的任何問題。你仍然應該看到相同的輸出,因爲你的屏幕將是 - 1,1和0-100四個看起來應該是一樣的。 – Harish

+0

你有沒有在你的代碼中使用'glEnable(GL_CULL_FACE)'? – derhass

回答