您好,欢迎来到叨叨游戏网。
搜索
您的当前位置:首页OpenGL设置顶点布局的封装

OpenGL设置顶点布局的封装

来源:叨叨游戏网

正常来说,在OpenGL中,指定一块顶点缓存的布局(假设5种属性)

glBindBuffer(GL_ARRAY_BUFFER, QuadVertexBufferID);

// 位置属性
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 11 * sizeof(float), (void*)0);
glEnableVertexAttribArray(0);

// 颜色属性
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 11 * sizeof(float), (void*)(3 * sizeof(float)));
glEnableVertexAttribArray(1);

// 法线属性
glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, 11 * sizeof(float), (void*)(6 * sizeof(float)));
glEnableVertexAttribArray(2);

// 纹理坐标属性
glVertexAttribPointer(3, 2, GL_FLOAT, GL_FALSE, 11 * sizeof(float), (void*)(9 * sizeof(float)));
glEnableVertexAttribArray(3);

// 切线向量属性
glVertexAttribPointer(4, 3, GL_FLOAT, GL_FALSE, 11 * sizeof(float), (void*)(11 * sizeof(float)));
glEnableVertexAttribArray(4);

非常简单,口算就能算出来,但是当顶点缓存的布局类型变多之后,属性数量变复杂后,就会非常冗杂、可读性差、可维护性差

如果能够这样指定一个顶点缓存的布局,两个字“优雅”

QuadVertexBuffer->SetLayout({
	{ ShaderDataType::Float3, "a_Position"     },
	{ ShaderDataType::Float4, "a_Color"        },
	{ ShaderDataType::Float2, "a_TexCoord"     },
	{ ShaderDataType::Float,  "a_TexIndex"     },
	{ ShaderDataType::Float,  "a_TilingFactor" },
	{ ShaderDataType::Int,    "a_EntityID"     }
});

如何实现?

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.net 版权所有 湘ICP备2024080961号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务