gpt4 book ai didi

JavaScript 转换为 Float32Array 并返回 WebGL readPixels

转载 作者:行者123 更新时间:2023-12-03 03:04:52 28 4
gpt4 key购买 nike

我将 id(这是一个包含在 24 位范围内的值)存储到 Float32Array(3) 中,以便稍后在 WebGL 中检索:

var r = 0, 
g = 0,
b = id;
if (b >= 65536) {
r = ~~(b / 65536);
b -= r * 65536;
}
if (b >= 256) {
g = ~~(b / 256);
b -= g * 256;
}
var fa = new Float32Array([r/255, g/255, b/255]);

为了完整起见,以下是我使用该值的方式:

gl.uniform3fv(uniforms['u_id'], fa);

...这就是我从 WebGLRenderingContext.readPixels() 取回我的 id 的方法:

var result = new Uint8Array(4);
gl.readPixels(x, y, 1, 1, gl.RGBA, gl.UNSIGNED_BYTE, result);
var id = result[0] << 16 | result[1] << 8 | result[2];

将该值拆分到我的 Float32Array 中的正确方法是什么?我坚信这样的任务可以以更高效、更优雅的方式完成(实际上,我正在做的事情是有效的,但确实伤害了我的眼睛)。

最佳答案

id 的形式如下:

0000 0000 rrrr rrrr gggg gggg bbbb bbbb

可以通过将部分(r、g 或 b)放入最低字节并屏蔽其余部分来提取它。有时这些步骤之一是不必要的。所以:

b = id & 255  // b is already in the low byte, so no shift
g = (id >> 8) & 255
r = id >> 16 // no mask because there is nothing "above" r

这可以与除法放在一起并放入数组中:

[(id >> 16) / 255, ((id >> 8) & 255) / 255, (id & 255) / 255]

关于JavaScript 转换为 Float32Array 并返回 WebGL readPixels,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47216851/

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