OpenGL没有渲染一半

时间:2018-11-11 22:03:12

标签: c++ opengl rendering glm-math

我正在尝试构建-0.5

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

我不确定,但这是否可以归因于MVP矩阵?我尝试对它们进行实验,但没有用。

请注意,是否有某种方法可以调试着色器文件中的问题?我正在英特尔集成显卡上使用Visual Studio 2017。看起来Visual Studio图形调试器仅适用于DirectX。目前,我只是想通过输出具有不同颜色的点来进行调试以获取视觉提示。

谢谢

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

1 个答案:

答案 0 :(得分:1)

从指向您的代码的链接中提取:

//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全部为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。