天空盒cubemap立方体绘制时由于六个面三角形绘制顺序问题造成纹理左右颠倒,修改void Skybox::initBuffers()为如下代码即可解决
void Skybox::initBuffers()
{
if (Configuration::getInstance()->supportsShareableVAO())
{
glGenVertexArrays(1, &_vao);
GL::bindVAO(_vao);
}
// init vertex buffer object
Vec3 vexBuf] =
{
Vec3(-1, 1, 1), Vec3(-1, -1, 1), Vec3(1, -1, 1), Vec3(1, 1, 1),
Vec3(-1, 1, -1), Vec3(-1, -1, -1), Vec3(1, -1, -1), Vec3(1, 1, -1)
};
glGenBuffers(1, &_vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(vexBuf), vexBuf, GL_STATIC_DRAW);
// init index buffer object
const unsigned char idxBuf] = {
7, 6, 5, 4, 7, 5,// font
3, 2, 6, 7, 3, 6,// right
0, 1, 2, 3, 0, 2,// back
4, 5, 1, 0, 4, 1,// left
0, 3, 7, 4, 0, 7,// up
1, 2, 6, 5, 1, 6// down
};
glGenBuffers(1, &_indexBuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _indexBuffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(idxBuf), idxBuf, GL_STATIC_DRAW);
if (Configuration::getInstance()->supportsShareableVAO())
{
glEnableVertexAttribArray(GLProgram::VERTEX_ATTRIB_POSITION);
getGLProgramState()->applyAttributes(false);
GL::bindVAO(0);
}
}
```