我是 C++ 和 OpenGl 的初学者,并尝试通过本系列学习后者:https://thecherno.com/opengl。当尝试渲染三角形时,第三个顶点位置显示为 0.0 并且无论我将其更改为什么,都不会更改。哪组浮点渲染哪个顶点的顺序也与 YT 系列中的不同。不过这不是问题。
float positions[6] = {
0.8f, -0.8f, // btm right corner
-0.8f, -0.8f, // btm left corner
0.0f, 0.8f // top center <<---- ISSUE
};
unsigned int buffer;
glGenBuffers(1, &buffer);
glBindBuffer(GL_ARRAY_BUFFER, buffer);
glBufferData(GL_ARRAY_BUFFER, 6 * sizeof(float), positions, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 2, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
我在这里发现了同样的问题:OpenGL中的第三个三角形顶点在窗口中渲染时显示为0.0但答案是不同的,这里问的人更进一步并使用了不同/不正确的参数。
我尝试将第三组浮点数更改为不同的数字
{..., 0.0, 1.0};
{..., 0.5, 0.5};
{..., 1.0, 1.0};
并尝试更改一些参数,但无济于事。
glVertexAttribPointer
的第二个参数是每个通用顶点属性的组件数量。示例中的顶点只有 2 个分量 (x, y),而不是 3
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 2, 0);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 2, 0);