Files
XCEngine/docs/api/rhi/opengl/vertex-array/add-vertex-buffer.md
2026-03-20 02:35:45 +08:00

49 lines
1.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# OpenGLVertexArray::AddVertexBuffer
```cpp
void AddVertexBuffer(unsigned int buffer, const VertexAttribute& attribute)
```
添加顶点缓冲区并配置顶点属性。
**详细描述:**
将顶点缓冲区绑定到 VAO并配置顶点属性的读取方式。调用时
1. 绑定 VAO
2. 绑定顶点缓冲区
3. 启用顶点属性数组
4. 使用 `glVertexAttribPointer` 配置属性格式
5. 解绑缓冲区和 VAO
**参数:**
- `buffer` - OpenGL 缓冲区对象 IDGL_ARRAY_BUFFER 类型)
- `attribute` - 顶点属性描述结构体 [`VertexAttribute`](vertex-attribute.md)
**示例:**
```cpp
// 位置属性 (对应着色器 layout(location = 0))
VertexAttribute attr;
attr.index = 0;
attr.count = 3; // xyz 三个分量
attr.type = GL_FLOAT; // float 类型
attr.normalized = GL_FALSE; // 不归一化
attr.stride = sizeof(Vertex); // 顶点结构体大小
attr.offset = 0; // 位置在结构体起始处
vao.AddVertexBuffer(positionVBO, attr);
// 纹理坐标属性 (对应着色器 layout(location = 1))
VertexAttribute texAttr;
texAttr.index = 1;
texAttr.count = 2; // uv 两个分量
texAttr.type = GL_FLOAT;
texAttr.normalized = GL_FALSE;
texAttr.stride = sizeof(Vertex);
texAttr.offset = offsetof(Vertex, texCoord); // 纹理坐标偏移
vao.AddVertexBuffer(texCoordVBO, texAttr);
```
## 相关文档
- [OpenGLVertexArray](vertex-array.md) - 返回类总览
- [VertexAttribute](vertex-attribute.md) - 属性结构体详细说明