gpt4 book ai didi

3d - webgl 和 glsl 选取

转载 作者:行者123 更新时间:2023-12-02 15:42:51 26 4
gpt4 key购买 nike

我正在从头开始实现 webgl 选取,并决定走 GLSL 路线,而不是光线相交测试。

所以我将整个场景渲染到一个单独的帧缓冲区中,为每个对象分配一个唯一的颜色,该颜色作为统一变量传递给片段着色器。当场景渲染时,我 gl.readPixels() 缓冲区,并获取单击坐标处的颜色值(我反转坐标系统以考虑与浏览器坐标系统不同的 GL)。

我遇到的问题是,着色器将传递给 gl_FragColor 着色器输出的颜色表示为 vec4 float ,每个颜色 channel 的范围为 0.0-1.0,而 gl.readPixels() 将颜色 channel 返回为 0-255 范围内的整数...进行此转换会损失一些精度,并且可能会产生拾取错误(如果场景中有很多对象(超过 255 个),或者如果整数到浮点舍入大于区分不同对象 ID 所需的粒度) )。

有人知道如何解决这个问题,或者为我指明正确的方向吗?readPixels() 可以返回 0.0-1.0 范围内颜色 channel 的浮点值吗?我可以打包分布在多个 channel 上的单个对象 ID(以便我不限于单个 channel 并且只能选择 255 个对象吗?)

感谢您的帮助

最佳答案

在 WebGL 中存在一些将 float 从 GPU 读取到 CPU 的技巧:

http://lab.concord.org/experiments/webgl-gpgpu/webgl.html

更具体:

关于3d - webgl 和 glsl 选取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16905302/

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