ZBLOG

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

glVertexAttribPointer 是 OpenGL 中用于指定顶点属性数据的函数。以下是它的参数解释,以及如何使用这个函数来设置顶点属性。

函数原型

void glVertexAttribPointer(
    GLuint index,
    GLint size,
    GLenum type,
    GLboolean normalized,
    GLsizei stride,
    const void* pointer
);

参数说明

  1. index: 指定要修改的顶点属性的索引(通常与着色器中定义的属性位置相对应)。在这里,0 表示我们正在设置位置属性。

  2. size: 每个顶点属性的组件数量。对于三维坐标,您通常会使用 3(表示 x, y, z)。

  3. type: 数据类型,通常为 GL_FLOAT,表示每个组件都是一个浮点数。

  4. normalized: 如果为 GL_TRUE,则整数数据将在被传递给着色器时被归一化到 [-1, 1] 或 [0, 1] 的范围内;对于浮点数,此参数可以设为 GL_FALSE

  5. stride: 相邻顶点之间的字节偏移量。如果数据是紧凑存储(即每个顶点的数据在数组中是连续的),可以将其设为 0 或者设置为每个顶点结构所占用字节数。在您的例子中,这里是 8 * sizeof(float) ,这意味着每个顶点包含两个附加的数据分量,可能是法线、纹理坐标等信息。

  6. pointer: 指向第一组数据的指针。对于从 VBO 中读取时,如果您绑定了 VBO,这里通常设为 (void*)0 表示从缓冲区开始读;如果没有绑定 VBO,则指向客户端内存中的数组地址。

示例代码

以下是一个完整示例,其中设置了一个带有位置和颜色属性的简单 VAO:

// 假设已经初始化了 OpenGL 上下文并创建了 VAO 和 VBO
GLuint VAO, VBO;
glGenVertexArrays(1, &VAO);
glGenBuffers(1, &VBO);

// 绑定 VAO
glBindVertexArray(VAO);

// 绑定并设置 VBO 数据
glBindBuffer(GL_ARRAY_BUFFER, VBO);
float vertices[] = {
    // 位置         // 颜色
     0.5f,  0.5f, 0.0f,   1.0f, 0.0f, 0.0f, // 顶部右
     0.5f, -0.5f, 0.0f,   0.0f, 1.0f, 0.0f, // 底部右
    -0.5f, -0.5f, 0.0f,   0.0f, 0.0f, 1.0f, // 底部左
    -0.5f,  0.5f, 0.0f ,   1.f ,1.f , .00 // 顶部左 
};
glBufferData(GL_ARRAY_BUFFER,sizeof(vertices), vertices , GL_STATIC_DRAW);

// 设置顶点位置属性 (索引为第一个:位置)
glVertexAttribPointer(0 ,3 , GL_FLOAT , GL_FALSE ,6 * sizeof(float) , (void*) nullptr);
glEnableVertexAttribArray(2); 

// 设置颜色属性 (索引为第二个:颜色)
glVertexAttribPointer(2 ,3 , GL_FLOAT , GL_FALSE ,6 * sizeof(float) , (void*)(3 * sizeof(float)));
glEnableVertexAttribArray(2); 

// 最后解绑 VAO 
glBindVertexArray( zero );

注意事项

  • 确保在调用此函数之前已正确创建和绑定相应的 Vertex Array Object(VAO)和 Vertex Buffer Object(VBO)。
  • 在使用着色器时,请确保在着色器程序中定义了相应的位置和颜色变量,并且它们的位置与 index 参数匹配。
  • 开启相应的位置和颜色数组通过 glEnableVertexAttribArray() 函数来使得这些数据能正确传输到着色器。

希望这对你理解如何使用 glVertexAttribPointer 有所帮助!如有其他问题,请随时询问。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:http://sdn.0voice.com/?id=6639

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?