c++ - 发送 3 字节数据到 OpenGL GLSL

标签 c++ opengl glsl shader

我正在开发一款基于 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 , 我现在可以回答你 ;)

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

关于c++ - 发送 3 字节数据到 OpenGL GLSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14958859/

相关文章:

c - VS2015 gsl编译错误

C++11:是什么阻止存储提升超过锁的临界区的开始?

c++ - 从 32 位系统迁移到 64 位系统时如何避免结果发生变化?

c++ - 使用 tbb::allocator<T>.allocate 发生访问冲突

c++ - 同时与两个片段着色器发生碰撞

opengl - 在片段着色器中根据地形高程数据计算法线

c++ - cin.get() 有效但 cin.getline() 无效。我对 cin.getline() 做错了什么或误解了什么?

纯 C 中的 Cocoa OpenGL 窗口?

c++ - OpenGL 相机类

glsl - WebGL vec4() 描述