【问题标题】:Don't fully understand the concept of Vertex Attributes不完全理解顶点属性的概念
【发布时间】:2021-06-22 05:17:54
【问题描述】:

我正在关注learnopengl.com 上的 OpenGL 教程,并决定测试我是否完全掌握了顶点属性的概念。我尝试调整 code 只是为了看看它是否像我认为的那样在幕后工作。

这是我修改后的 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 顶点属性由 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 个浮点数。

我希望程序渲染的是一个倒置的等腰三角形,但最终渲染的只是背景。那么,我对顶点属性如何在幕后工作的理解中究竟缺少什么?

【问题讨论】:

    标签: c++ opengl vertex-attributes


    【解决方案1】:

    glVertexAttribPointer 的最后一个参数是缓冲区对象数据存储中的 字节 偏移量。第三个组件的偏移量是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)));
    

    【讨论】:

    • 就是这样。非常感谢! “字节偏移”的“字节”部分正好飞过我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    相关资源
    最近更新 更多