1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
SkyBox::SkyBox()
{
vertices[0] = -1.0; vertices[1] = -1.0; vertices[2] = 1.; // v0
vertices[3] = 1.0; vertices[4] = -1.0; vertices[5] = 1.0; // v1
vertices[6] = 1.0; vertices[7] = 1.0; vertices[8] = 1.; // v3
vertices[9] = -1.0; vertices[10] = 1.0; vertices[11] = 1.0; // v2
vertices[12] = -1.0; vertices[13] = -1.0; vertices[14] = -1.0; // v9
vertices[15] = 1.0; vertices[16] = -1.0; vertices[17] = -1.0; // v5
vertices[18] = 1.0; vertices[19] = 1.0; vertices[20] = -1.0; // v7
vertices[21] = -1.0; vertices[22] = 1.0; vertices[23] = -1.0; // v11
GLushort indices[] = {
0,1,2, 2,3,0,
0,3,4, 4,5,0,
0,5,6, 6,1,0,
1,6,7, 7,2,1,
7,4,3, 3,2,7,
4,7,6, 6,5,4
};
glGenBuffers(1, &m_vbuffer);
glBindBuffer(GL_ARRAY_BUFFER, m_vbuffer);
glBufferData(GL_ARRAY_BUFFER, 24 * sizeof(double), vertices, GL_STREAM_DRAW);
glGenBuffers(1, &m_ibuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_ibuffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, 36 * sizeof(GLushort), indices, GL_STREAM_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, m_vbuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_ibuffer);
}
void SkyBox::render(QOpenGLShaderProgram *program)
{
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, m_vbuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_ibuffer);
int vertexLocation = program->attributeLocation("a_position");
program->enableAttributeArray(vertexLocation);
glVertexAttribPointer(vertexLocation, 3, GL_FLOAT, GL_FALSE, sizeof(double), vertices);
// Draw cube geometry using indices from VBO 1
glDrawElements(GL_TRIANGLES, 12, GL_UNSIGNED_BYTE, 0);
} |
Partager