1

我正在开发一个基于 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 中,但我毫不怀疑这不是正确的方法。我知道我在某个地方错了,但我不明白我能做什么(正如我所说,也许这甚至是不可能的)。

感谢您的帮助/建议!

4

1 回答 1

0

好的,今天我了解了其他版本的glVertexAttrib,我现在可以回答你了;)

如果你想将整数顶点属性按原样传递给着色器,你必须(显然)使用. 如果您想接收浮点输入(例如),请查看链接页面和应用的转换。glVertexAttribIPointervec3

于 2013-02-19T14:11:16.207 回答