Hi everyone,
I’ve just started learning OpenGL over the last couple of days and am currently trying to draw a grid. For my testing purposes however I’m attempting to draw a single line. I should also mention I’m trying to do it with a VBO.
So creating my buffers & shader:
std::vector<glm::vec3> vertices;
std::vector<GLuint> indices;
GLuint vbo, indexBuffer;
// Add Vertices
vertices.push_back(glm::vec3(0.0f, 0.0f, 0.0f));
vertices.push_back(glm::vec3(5.0f, 0.0f, 0.0f));
// Add indicies
indices.push_back(0);
indices.push_back(1);
// Create buffers
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(glm::vec3) * vertices.size(), &vertices[0], GL_STATIC_DRAW);
glGenBuffers(1, &indexBuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(GLuint) * indices.size(), &indices[0], GL_STATIC_DRAW);
// Create shader
Shader gridShader = Shader();
gridShader.loadShaders("shaders/shdr_grid.vert", "shaders/shdr_grid.frag");
Then in my render loop my code for drawing is:
gridShader.use();
gridShader.setUniform("view", view);
gridShader.setUniform("projection", projection);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexBuffer);
glDrawElements(GL_LINES, indices.size(), GL_UNSIGNED_INT, 0);
glDisableVertexAttribArray(0);
The view and projection matrix are confirmed correct when displaying models.
Now shader time
Vertex:
#version 330
uniform mat4 projection;
uniform mat4 view;
layout (location = 0) in vec3 pos;
void main(void)
{
gl_Position = projection * view * vec4(pos, 1.0);
}
Fragment:
#version 330
out vec4 outColor;
void main(void) {
outColor = vec4(1.0, 1.0, 1.0, 1.0);
}
I figured I didn’t need a model matrix if the grid was never going to transform (which it isn’t), as I’d just be passing in an identity matrix.
Thanks in advance!
Kaine