我正在开发一款基于 Voxed 的小游戏。我不打算创建一个 Minecraft 拷贝,但这不是这里的重点。
使用 C++ OpenGL 和 VBO,我无法成功地将“非标准”类型发送到我的 GLSL 着色器。 假设一个由 3 个 uint8_t 属性组成的结构,我试图将这个结构的数组发送到我的 glsl。但我无法获得正确的值。
我找到的最准确的是:WebGL - How to pass unsigned byte vertex attribute colour values?
但它并没有真正回答我的问题。
这里有一些代码可以帮助理解我正在尝试做的事情。我什至不知道是否有任何解决方案可以实现...
我的结构
struct Color
{
uint8_t r, g, b;
// Getter and setter etc...
};
我如何将它绑定(bind)到 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 中,但我确信这不是正确的做法。我知道我在某个地方错了,但我不明白我能做什么(正如我所说,也许这甚至是不可能的)。
感谢您的帮助/建议!
最佳答案
好的,今天我了解了 other versions of glVertexAttrib
, 我现在可以回答你 ;)
如果你想按原样将整数顶点属性传递给着色器,你必须(显然)使用 glVertexAttrib
I
指针
。如果您想接收浮点输入(例如 vec3
),请查看链接页面和应用的转换。
关于c++ - 发送 3 字节数据到 OpenGL GLSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14958859/