我正在开发一个基于 Voxed 的小游戏。我不打算创建 Minecraft 副本,但这不是重点。
使用 C++ OpenGL 和 VBO,我无法成功地将“非标准”类型发送到我的 GLSL 着色器。假设一个结构由 3 个 uint8_t 属性组成,我试图将这个结构的数组发送到我的 glsl。但我无法得到正确的值。
我发现的最准确的东西是:WebGL - 如何传递无符号字节顶点属性颜色值?
但它并没有真正回答我的问题。
这里有一些代码可以帮助理解我想要做什么。我什至不知道是否有任何解决方案可以实现它...
我的结构
struct Color
{
uint8_t r, g, b;
// Getter and setter etc...
};
我如何将它绑定到 VBO
//_colors contains an array of Color
//_colors.array = new Color[SIZE];
glBind(GL_ARRAY_BUFFER, _colors.buffer);
glBufferData(GL_ARRAY_BUFFER,
sizeof(Color) * _colors.size,
&(_colors.array[0]),
GL_STATIC_DRAW);
我如何尝试将它们发送到 GPU
glBind(GL_ARRAY_BUFFER, _colors.buffer);
glVertexAttribPointer((GLint)1, 3, GL_UNSIGNED_BYTE, GL_FALSE, 0, 0);
我将值存储在着色器中的 vec3 中,但我毫不怀疑这不是正确的方法。我知道我在某个地方错了,但我不明白我能做什么(正如我所说,也许这甚至是不可能的)。
感谢您的帮助/建议!