OpenGL 不渲染一半的点

OpenGL not rendering half the points

我正在尝试构建一个简单的 y=x 曲线,其中 -0.5< x <0.5 且 z = 0。但是由于某种原因,一半的 x 点没有被渲染。为了简单起见,我使用点基元,而不使用任何索引缓冲区。 我检查了 x 值是否正确生成并且在范围内,但仍然没有显示正半部分 (0< x <0.5)。

代码在这里: https://github.com/abhimittal664/opengl

我不太确定,但这会不会是因为 MVP 矩阵?我试着用它们做实验,但没有用。

另外请注意,是否有一些方法可以调试着色器文件中的问题?我在intel集成显卡机上用的是visual studio 2017。看起来 visual studio 图形调试器仅适用于 directx。目前我只是尝试通过输出不同颜色的点来获得视觉提示来进行调试。

谢谢

编辑 1: y = x 函数在顶点着色器中。顶点缓冲区只有 x 值,y,z = 0.

从link中提取到您的代码:

//Vertex buffer definition
struct vertex {
    glm::vec3 position;
    glm::vec3 color;
};

void populate_vertex_buffer(vertex* vertices, int n_vertices) {
    ...
    for (int x = 0; x < n_vertices; x++) {
        count = -0.5f + (1.f / n_vertices)*(float)x;
            vertices[x].position = glm::vec3((-0.5f + (1.f / n_vertices)*(float)x), 0, 0);
            vertices[x].color = glm::vec3(0.0, 0.0, 0.0);
    ...

所以缓冲区中的数据是XYZRGBXYZRGBXYZRGB...... Y,Z,R,G,B all = 0)

你告诉驱动程序如何读取这个缓冲区:

glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
...
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL);
glEnableVertexAttribArray(0);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)offsetof(vertex, color));

注意第二个glVertexAttribPointer。它表明第二个属性(VS 中的 vc)从位置 offsetof(vertex, color) 开始,然后每种颜色都与前一个颜色连续(第五个参数 = 0)。这对于像 XYZXYZXYZ......RGBRGBRGBRGB...

这样的缓冲区数据很有用

我认为阅读说明是

glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6*sizeof(float), NULL);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6*sizeof(float), 3*sizeof(float);

其中 6 来自两个相同属性之间的六个值 XYZRGB。