首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >顶点着色器中的WebGL 32位浮点

顶点着色器中的WebGL 32位浮点
EN

Stack Overflow用户
提问于 2014-04-29 02:34:45
回答 1查看 737关注 0票数 0

有没有办法在WebGL着色器中获得32位浮点数?我将大量数据打包到4个无符号字节中,我不希望将其拆分成3个字节,因为这会增加客户端的计算。

例如,对于三对打包的数据,我显然更喜欢这种布局:

代码语言:javascript
复制
|u0 u1 u2 u3|u4 u5 u6 u7|u8 u9 u10 u11|

而不是这样:

代码语言:javascript
复制
|u0 u1 u2|u3 u4 u5|u6 u7 u8|u9 u10 u11|

这不仅添加了一个浮点数来添加通过总线发送的数据,而且还让我在客户机上生成24位数字,而不是简单地使用自动处理4个字节的Float32Array。

EN

回答 1

Stack Overflow用户

发布于 2014-04-30 00:45:41

我真的不理解你的问题,但是如果你想上传字节到WebGL,为什么不直接传递字节呢?

代码语言:javascript
复制
var data = new Uint8Array([1,2,3,4,5,6,7,8]);
var buf = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, buf);
gl.bufferData(gl.ARRAY_BUFFER, data, gl.STATIC_DRAW);

...

gl.enableVertexAttribArray(someLoc);

var numComponents = 4;  // number of bytes to pull out each time
var type = gl.BYTE;     // BYTE goes from -128 to +127 or -1.0 to 1.0
                        // UNSIGNED_BYTE goes from 0 to 255 or 0.0 to 1.0
var normalize = false;  // false = use the value as is (-128 to +127 for BYTE,
                        // 0 to 255 for UNSIGNED_BYTE). 
                        // true = convert to -1.0 to +1.0 for BYTE or 0 to 1.0 for
                        // UNSIGNED_BYTE
var stride = 0;         // 0 means just advance numComponents * sizeof type.
var offset = 0;         // how far into your buffer to start.
gl.vertexAttribPointer(someLoc, numComponents, type, normalize, stride, offset);

如果您使用的是Uint8ArrayInt8Array,那么似乎没有任何特殊的工作需要在值中“打包”,因此拥有numComponents = 3并不比numComponents = 4更难或更容易。您只需直接设置每个组件。同样的,也没有解包的工作,GL会帮你解包。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23348687

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档