我目前正在空闲时间学习 OpenGL,最近我遇到了一个我不明白的“错误”。
问题是,我没有错误,我的屏幕上只出现什么。我正在使用带有 SFML 的 OpenGL。
这是我的代码。这是我的方法:
void CreateObjet(GLuint& vao, GLuint& vbo, GLuint& ebo, GLuint& textureLocation)
//I create my arrays here.. Don't worry they are fine.
CreateTexture(textureLocation);
glGenBuffers(1, &vbo);
glGenBuffers(1, &ebo);
glGenVertexArrays (1, &vao);
glBindVertexArray (vao); //On travaille dans le VAO
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData (GL_ARRAY_BUFFER, sizeof(points), points, GL_STATIC_DRAW);
glVertexAttribPointer (0, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(GLfloat), NULL);
glEnableVertexAttribArray(0);
glBufferData (GL_ARRAY_BUFFER, sizeof(colors), colors, GL_STATIC_DRAW);
glVertexAttribPointer (1, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(GLfloat), (GLvoid*)(3* sizeof(GLfloat)));
glEnableVertexAttribArray(1);
glBufferData (GL_ARRAY_BUFFER, sizeof(texCoords), texCoords, GL_STATIC_DRAW);
glVertexAttribPointer (2, 2, GL_FLOAT, GL_FALSE, 8 * sizeof(GLfloat), (GLvoid*)(6* sizeof(GLfloat)));
glEnableVertexAttribArray(2);
//EBO
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indiceFinal), indiceFinal, GL_STATIC_DRAW);
glBindVertexArray(0);
我知道我的问题不在于我的着色器,因为我在控制台中使用 GlshaderRiv() 没有收到任何错误。
我想知道我的订单是否正确。
- 我创建了一个 VBO 和一个 EBO
- 我创建了一个 VAO
- 我绑定当前的VAO来修改它
- 我将当前 VBO 绑定到 VAO 中
- 我在我的 VBO 中绑定了我的第一个数组(顶点位置向量 3f),并将它们放在具有正确偏移和步幅的第一个指针中。
- 我在我的 VBO 中绑定了我的第二个数组(颜色位置向量 3f),并将它们放在第一个指针中,并具有正确的偏移量和步幅。
- 我在我的 VBO 中绑定了我的第三个数组(纹理位置向量 2f),并将它们放在具有正确偏移和步幅的第一个指针中。
- 我在 VAO 中绑定了一个 EBO
- 我将 EBO 与我的元素位置(矢量 3u)绑定。
- 我从内存中取消绑定 VAO,因为我的绘图循环在代码中很晚,所以我不想白白使用内存空间。别担心,在我画之前我把 glBindVertexArray(&vao);