我从头开始实施 webgl 拾取,并决定沿着 GLSL 路线走,与光线相交测试相反。
所以我将整个场景渲染到一个单独的帧缓冲区中,为每个对象分配一个唯一的颜色,该颜色作为统一变量传递给片段着色器。当渲染场景时,我 gl.readPixels() 缓冲区,并在单击坐标处获取颜色值(我反转坐标系统以说明 GL 与浏览器坐标系统不同)。
我遇到的问题是着色器表示传递给 gl_FragColor 着色器输出的颜色,因为 vec4 浮动,每个颜色通道的范围为 0.0-1.0,而 gl.readPixels() 将颜色通道返回为 0-255 范围内的整数......做这个翻译失去一些精度,并且可能会产生拾取错误(如果场景中有很多对象(超过 255 个),或者如果整数到浮点舍入大于区分不同对象 ID 所需的粒度)。
有谁知道如何解决这个问题,或者指出我正确的方向?readPixels() 可以返回 0.0-1.0 范围内颜色通道的浮点值吗?我可以打包分布在多个通道上的单个对象 ID(这样我就不仅限于单个通道并且只能选择 255 个对象吗?)
谢谢您的帮助