如何在 OpenGl windows 中创建二维网格?

How to create a 2d grid in OpenGl windows?

我正在尝试在整个 window 上打印二维网格。

代码:

float slices(15);
std::vector<glm::vec3> vert;
std::vector<glm::uvec3> ind;

for (int j = 0; j <= slices; j++) {
    for (int i = 0; i <= slices; i++) {

        GLfloat x = (float)i / (float)slices;
        GLfloat y = (float)j / (float)slices;
        GLfloat z = 0;
        vert.push_back(glm::vec3(x, y, z));
        
    }
}
for (int j = 0; j < slices; j++) {
    for (int i = 0; i < slices; i++) {

        int row1 = j * (slices + 1);
        int row2 = (j + 1) * (slices + 1);

        ind.push_back(glm::uvec3(row1 + i, row1 + i + 1, row2 + i));
        ind.push_back(glm::uvec3(row1 + i, row2 + i + 1, row2 + i));

    }
}
{//generate vao and bind bufffer objects}
GLuint lenght = (GLuint)ind.size() * 3;

glBindVertexArray(vao);

glDrawElements(GL_LINES, lenght, GL_UNSIGNED_INT, NULL);

这只会在我的 window(正 x,y 平面)的四分之一上打印网格。

当我像这样在 for 循环中的 i 或 j 前面放一个负数时:

(GLfloat x = (float)-i/(float)slices;  

我在 window 的其他象限之一中得到了一个网格。我尝试通过擦除矢量并用每个象限的坐标重新填充它来多次渲染网格,但这似乎不起作用,而且效率似乎非常低。

标准化设备坐标在 [-1.0, 1.0] 范围内。将坐标从 [0.0,1.0] 映射到 [-1.0, 1.0]:

vert.push_back(glm::vec3(x, y, z));

vert.push_back(glm::vec3(x * 2.0f - 1.0f, y * 2.0f - 1.0f, z));