我正在学习 opengl.com上的 OpenGL 教程,并决定测试我是否完全掌握了顶点属性的概念。我尝试调整代码只是为了看看它是否像我认为的那样在幕后工作。
这是我修改后的vertices
数组的样子:
float vertices[] = {
-0.5f, -0.5f, 0.0f, -0.5f, 0.5f,
0.5f, -0.5f, 0.0f, 0.5f, 0.5f,
0.0f, 0.5f, 0.0f, 0.0f, -0.5f,
};
每个顶点现在是 5 个浮点数,而我想要的位置属性是每个顶点的最后两个浮点数(分别为 x 和 y,z 默认为 0.0)。
所以这是我修改后的顶点属性规范:
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*) 3);
glEnableVertexAttribArray(0);
目前,我如何读取第一个函数(从左到右)是 - “第0个顶点属性由2 个未标准化的浮点数组成。每个顶点由5个浮点数组成,第 0 个属性位于左侧的3 个索引处每个顶点。”
我修改后的顶点着色器如下所示:
#version 330 core
layout(location = 0) in vec2 aPos;
void main() {
gl_Position = vec4(aPos.x, aPos.y, 0.0, 1.0);
}
我目前的理解是location = 0
指定我们正在查看第 0 个属性,这是我的位置属性。我使用vec2
该属性是因为该属性只有 2 个浮点数。
我希望程序渲染的是一个倒置的等腰三角形,但最终渲染的只是背景。那么,我对顶点属性如何在幕后工作的理解中究竟缺少什么?