没有完全理解 Vertex Attributes 的概念
Don't fully understand the concept of Vertex Attributes
我一直在关注 learnopengl.com, and decided to test if I've fully grasped the concept of Vertex Attributes. I tried tweaking the code 上的 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 个浮点数宽,而我想要的 position 属性 是每个顶点的最后两个浮点数(分别为 x 和 y,默认为 z到 0.0).
所以这是我修改后的顶点属性规范:
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*) 3);
glEnableVertexAttribArray(0);
目前,我如何阅读第一个函数(从左到右)是 - “0th vertex-attribute consists of 2 floats 没有归一化。每个顶点由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 个浮点数。
我想让程序渲染的是一个倒过来的等腰三角形,结果渲染出来的就是背景。那么我对顶点属性在幕后如何工作的理解究竟缺少什么?
glVertexAttribPointer
的最后一个参数是 byte 缓冲区对象数据存储的偏移量。第三个分量的偏移量是 3 * sizeof(float)
而不是 3:
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*) 3);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE,
5 * sizeof(float), (void*)(3 * sizeof(float)));
我一直在关注 learnopengl.com, and decided to test if I've fully grasped the concept of Vertex Attributes. I tried tweaking the code 上的 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 个浮点数宽,而我想要的 position 属性 是每个顶点的最后两个浮点数(分别为 x 和 y,默认为 z到 0.0).
所以这是我修改后的顶点属性规范:
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*) 3);
glEnableVertexAttribArray(0);
目前,我如何阅读第一个函数(从左到右)是 - “0th vertex-attribute consists of 2 floats 没有归一化。每个顶点由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 个浮点数。
我想让程序渲染的是一个倒过来的等腰三角形,结果渲染出来的就是背景。那么我对顶点属性在幕后如何工作的理解究竟缺少什么?
glVertexAttribPointer
的最后一个参数是 byte 缓冲区对象数据存储的偏移量。第三个分量的偏移量是 3 * sizeof(float)
而不是 3:
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(float), (void*) 3);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE,
5 * sizeof(float), (void*)(3 * sizeof(float)));