【发布时间】:2022-08-28 02:17:34
【问题描述】:
我有一个场景,我画了一堆物体。我希望用户能够通过鼠标选择每个对象。我想要做的是将场景渲染为纹理,将每个对象绘制为纯纯色(其中对象的 ID 被编码)。然后我将读回纹理的位,获取鼠标位置的 ID 并使用它来选择对象。
我正在创建我的屏幕外缓冲区,如下所示:
XGL(glTexImage2D(GL_TEXTURE_2D, 0, GL_R16UI, mWidth, mHeight,0,GL_RED_INTEGER, GL_UNSIGNED_SHORT, mBits));
但我的问题是......我不知道如何让着色器(GLSL3 3.0)写一个整数而不是规范化的浮点数。我可以将整数 ID 号编码为标准化的 4 浮点颜色,然后在读取像素时将其转换回来,但我担心浮点“模糊”会导致小的不准确性(即 ID (int)3 变为 ID ( float)2.999999999999) 来回转换时。
有没有办法简单地告诉着色器,“这是我想写入颜色缓冲区的 4 个字节,更不用说浮点转换的东西了?”
【问题讨论】:
标签: opengl-es glsl fragment-shader render-to-texture gles