gpt4 book ai didi

opengl - glVertexAttribPointer 如何处理字节?

转载 作者:行者123 更新时间:2023-12-05 04:38:34 27 4
gpt4 key购买 nike

根据我的理解,OpenGL 在将所有顶点属性数据用于顶点着色器之前将其转换为 32 位 float 。但是 glVertexAttribPointer 也采用数据类型 GL_BYTEGL_UNSIGNED_BYTE(8 位)。如果我缓冲并将一个无符号字节数组发送到 gpu 并使用

glVertexAttribPointer(0, 3, GL_UNSIGNED_BYTE, GL_FALSE, 3 * sizeof(unsigned char), (void*)0);

这样做,作为字节数组发送到/存储在 gpu 上,然后在着色器读取它们时将它们转换为 float ?这将使我的更新速度翻两番并占用我的内存空间四分之一。还是将它们发送/存储为 float 或做其他事情?有没有办法在着色器中将 VBO 读取为整数或字节? glVertexAttribIPointer 有什么不同吗?如果您想知道为什么,我的游戏使用 256x256x256 block ,所以...

最佳答案

参见 glVertexAttribPointer每个字节都是属性的一个组成部分,并转换为浮点值。如果参数 normalized 设置为 GL_TRUEGL_UNSIGNED_BYTE 组件将被视为无符号标准化值并从范围 [0, 255] 映射到 [ 0.0, 1.0].

如果你想使用整型属性(int, ivec2, ivec3, ivec4)你必须使用glVertexAttribIPointer (关注 I)从具有完整组件值的数组加载属性。 glVertexAttribIPointer 保留整数,不将它们转换为 float 。

请注意,type 参数没有说明任何有关着色器属性类型的信息。它只指定数组中源数据的类型。

关于opengl - glVertexAttribPointer 如何处理字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70573028/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com