我正在使用glDrawElements绘制矩形。
glBindVertexArray(m_VAO);
glDrawElements(GL_TRIANGLES, 6 , GL_UNSIGNED_INT, 0);
glBindVertexArray(0);
我想画两个不同的几何体一个面对相机,一个在背面。
这是图纸的数据。
verticesRect = {
// Positions // Normal Coords // Texture Coords
(width / 2.0f) + taper, height / 2.0f, 0.0f, 0.0 , 0.0, 1.0 , 1.0f, 0.0f, // Top Right
width / 2.0f, -height / 2.0f, 0.0f, 0.0 , 0.0, 1.0 , 1.0f, 1.0f, // Bottom Right
-width / 2.0f, -height / 2.0f, 0.0f, 0.0 , 0.0, 1.0 , 0.0f, 1.0f, // Bottom Left
(-width / 2.0f) - taper, height / 2.0f, 0.0f, 0.0 , 0.0, 1.0 , 0.0f, 0.0f // Top Left
};
std::vector<float> verticesRectBack = {
// Positions // Normal Coords // Texture Coords
(width / 2.0f) + taper, height / 2.0f, 0.0f, 0.0 , 0.0, -1.0 , 1.0f, 0.0f, // Top Right
width / 2.0f, -height / 2.0f, 0.0f, 0.0 , 0.0, -1.0 , 1.0f, 1.0f, // Bottom Right
-width / 2.0f, -height / 2.0f, 0.0f, 0.0 , 0.0, -1.0 , 0.0f, 1.0f, // Bottom Left
(-width / 2.0f) - taper, height / 2.0f, 0.0f, 0.0 , 0.0, -1.0 , 0.0f, 0.0f // Top Left
};
verticesRect.insert(verticesRect.end(), verticesRectBack.begin(), verticesRectBack.end()); // Combining both the data sets.
这是 VAO 、VBO的配置数据。
glGenVertexArrays(1, &m_VAO);
glGenBuffers(1, &m_VBO);
glGenBuffers(1 , &m_EBO);
glBindVertexArray(m_VAO);
glBindBuffer(GL_ARRAY_BUFFER, m_VBO);
glBufferData(GL_ARRAY_BUFFER,verticesRect.size() * sizeof(float), &verticesRect[0], GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_EBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indicesTaperRectangle), indicesTaperRectangle, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)0);
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(3 * sizeof(float)));
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(2);
glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, 8 * sizeof(float), (void*)(6 * sizeof(float)));
这是指数的数据。
GLuint indicesTaperRectangle[] = { // Note that we start from 0!
0, 1, 3, // First Triangle
1, 2, 3 // Second Triangle
};
目前我只能画出第一个矩形,我怎么能画出第二个矩形呢?
1条答案
按热度按时间7rfyedvj1#
这与缓冲区无关。你所遇到的是背面剔除,如果你使用
glDisable(GL_CULL_FACE)
禁用它,你可以只使用一个绘制调用。另一种方法是把你的几何体做成两个矩形,然后翻转它的缠绕,这样你就可以重复使用顶点位置,只需要复制和翻转索引: