Я пытаюсь нарисовать простой «пол» с сеткой треугольников, но рисуется только первая четверть из них. Например, вот скриншот попытки 5 х 5 сетки:Как рисовать 2D-сетку в 3D?
Я триада несколько различных M x N
сетки, это, кажется, рисунок & # x230a; (MxN)/4 & # x230b; квадраты каждый раз.
Таким образом, для 5 х 5 сетки:
int QUAD_DEPTH = 5;
int QUAD_WIDTH = 5;
std::vector<GLfloat> vertices;
Я загружающего вектор; шесть поплавков на вершину (XYZRGB), три вершины на треугольник, два треугольника на квадрат:
for (int row = 0; row < QUAD_WIDTH; row++) {
for (int dist = 0; dist < QUAD_DEPTH; dist++) {
vertices.push_back(0.0f + row); // X
vertices.push_back(0.0f); // Y
vertices.push_back(0.0f + dist); // Z
vertices.push_back(1.0f); // R
vertices.push_back(0.0f); // G
vertices.push_back(0.0f); // B
vertices.push_back(1.0f + row); // X
vertices.push_back(0.0f); // Y
vertices.push_back(1.0f + dist); // Z
vertices.push_back(0.0f); // R
vertices.push_back(1.0f); // G
vertices.push_back(0.0f); // B
vertices.push_back(1.0f + row); // X
vertices.push_back(0.0f); // Y
vertices.push_back(0.0f + dist); // Z
vertices.push_back(0.0f); // R
vertices.push_back(0.0f); // G
vertices.push_back(1.0f); // B
vertices.push_back(0.0f + row); // X
vertices.push_back(0.0f); // Y
vertices.push_back(0.0f + dist); // Z
vertices.push_back(1.0f); // R
vertices.push_back(0.0f); // G
vertices.push_back(0.0f); // B
vertices.push_back(0.0f + row); // X
vertices.push_back(0.0f); // Y
vertices.push_back(1.0f + dist); // Z
vertices.push_back(0.0f); // R
vertices.push_back(1.0f); // G
vertices.push_back(0.0f); // B
vertices.push_back(1.0f + row); // X
vertices.push_back(0.0f); // Y
vertices.push_back(1.0f + dist); // Z
vertices.push_back(0.0f); // R
vertices.push_back(0.0f); // G
vertices.push_back(1.0f); // B
}
}
Тогда я буферные поплавки:
glGenVertexArrays(1, &VAO);
glGenBuffers(1, &VBO);
glBindVertexArray(VAO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, vertices.size(), &vertices[0], GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (GLvoid*)0);
glEnableVertexAttribArray(0);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (GLvoid*)(3 * sizeof(GLfloat)));
glEnableVertexAttribArray(1);
glBindVertexArray(0);
Затем нарисуйте его:
glBindVertexArray(VAO);
glUniformMatrix4fv(glGetUniformLocation(this->shader->Program, "projection"), 1, GL_FALSE, &projection[0][0]);
glUniformMatrix4fv(glGetUniformLocation(this->shader->Program, "view"), 1, GL_FALSE, &view[0][0]);
glUniformMatrix4fv(glGetUniformLocation(this->shader->Program, "model"), 1, GL_FALSE, &this->model_matrix[0][0]);
glDrawArrays(GL_TRIANGLES, 0, vertices.size());
glBindVertexArray(0);
I также попробовал glDrawArrays(GL_TRIANGLES, 0, vertices.size()/6);
, так как есть шесть поплавков на вершину, но он имеет тот же результат.
Я неправильно загружаю или неправильно рисую или это проблема в другом месте?
Awesome, спасибо! – Will