微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

没有完全理解Vertex Attributes的概念

如何解决没有完全理解Vertex Attributes的概念

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

这是我修改后的 vertices 数组的样子:

float vertices[] = {
    -0.5f,-0.5f,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 个浮点数。

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

解决方法

glVertexAttribPointer 的最后一个参数是缓冲区对象数据存储中的字节偏移量。第三个组件的偏移量是 3 * sizeof(float) 而不是 3:

glVertexAttribPointer(0,2,GL_FLOAT,GL_FALSE,5 * sizeof(float),(void*) 3);

glVertexAttribPointer(0,(void*)(3 * sizeof(float)));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。