72 lines
1.9 KiB
Markdown
72 lines
1.9 KiB
Markdown
|
|
# VertexAttribute
|
|||
|
|
|
|||
|
|
**命名空间**: `XCEngine::RHI`
|
|||
|
|
|
|||
|
|
**描述**: 顶点属性描述结构体,用于定义顶点缓冲区中单个属性的布局。
|
|||
|
|
|
|||
|
|
## 成员
|
|||
|
|
|
|||
|
|
| 成员 | 类型 | 描述 |
|
|||
|
|
|------|------|------|
|
|||
|
|
| `index` | `unsigned int` | 属性索引,对应着色器中 `layout(location = n)` |
|
|||
|
|
| `count` | `int` | 分量数量(1-4),如位置用 3,纹理坐标用 2 |
|
|||
|
|
| `type` | `unsigned int` | OpenGL 数据类型,如 `GL_FLOAT`、`GL_INT` |
|
|||
|
|
| `normalized` | `bool` | 是否归一化Fixed-point类型 |
|
|||
|
|
| `stride` | `size_t` | 连续顶点属性之间的字节偏移 |
|
|||
|
|
| `offset` | `size_t` | 此属性在顶点结构体中的字节偏移 |
|
|||
|
|
|
|||
|
|
## 类型取值参考
|
|||
|
|
|
|||
|
|
| 类型常量 | 描述 |
|
|||
|
|
|----------|------|
|
|||
|
|
| `GL_BYTE` | 有符号字节 |
|
|||
|
|
| `GL_UNSIGNED_BYTE` | 无符号字节 |
|
|||
|
|
| `GL_SHORT` | 有符号短整型 |
|
|||
|
|
| `GL_UNSIGNED_SHORT` | 无符号短整型 |
|
|||
|
|
| `GL_INT` | 有符号整型 |
|
|||
|
|
| `GL_UNSIGNED_INT` | 无符号整型 |
|
|||
|
|
| `GL_FLOAT` | 单精度浮点 |
|
|||
|
|
| `GL_DOUBLE` | 双精度浮点 |
|
|||
|
|
|
|||
|
|
## 使用示例
|
|||
|
|
|
|||
|
|
```cpp
|
|||
|
|
// 定义顶点结构体
|
|||
|
|
struct Vertex {
|
|||
|
|
float position[3];
|
|||
|
|
float normal[3];
|
|||
|
|
float texCoord[2];
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
// 位置属性 (index=0)
|
|||
|
|
VertexAttribute posAttr;
|
|||
|
|
posAttr.index = 0;
|
|||
|
|
posAttr.count = 3;
|
|||
|
|
posAttr.type = GL_FLOAT;
|
|||
|
|
posAttr.normalized = GL_FALSE;
|
|||
|
|
posAttr.stride = sizeof(Vertex);
|
|||
|
|
posAttr.offset = 0;
|
|||
|
|
|
|||
|
|
// 法线属性 (index=1)
|
|||
|
|
VertexAttribute normalAttr;
|
|||
|
|
normalAttr.index = 1;
|
|||
|
|
normalAttr.count = 3;
|
|||
|
|
normalAttr.type = GL_FLOAT;
|
|||
|
|
normalAttr.normalized = GL_FALSE;
|
|||
|
|
normalAttr.stride = sizeof(Vertex);
|
|||
|
|
normalAttr.offset = offsetof(Vertex, normal);
|
|||
|
|
|
|||
|
|
// 纹理坐标属性 (index=2)
|
|||
|
|
VertexAttribute texAttr;
|
|||
|
|
texAttr.index = 2;
|
|||
|
|
texAttr.count = 2;
|
|||
|
|
texAttr.type = GL_FLOAT;
|
|||
|
|
texAttr.normalized = GL_FALSE;
|
|||
|
|
texAttr.stride = sizeof(Vertex);
|
|||
|
|
texAttr.offset = offsetof(Vertex, texCoord);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 相关文档
|
|||
|
|
|
|||
|
|
- [OpenGLVertexArray](vertex-array.md) - 返回类总览
|
|||
|
|
- [AddVertexBuffer](add-vertex-buffer.md) - 添加顶点缓冲方法
|