将整数渲染到 GLSL 中的单独纹理
Posted
技术标签:
【中文标题】将整数渲染到 GLSL 中的单独纹理【英文标题】:Rendering integers to a separate texture in GLSL 【发布时间】:2014-06-20 18:58:26 【问题描述】:我想在 OpenGL 中渲染一组带纹理的四边形,但我想知道是否有任何方法可以将每个四边形的唯一整数 id 传递给着色器管道?
id 需要对片段着色器可用,以便可以将其渲染为纹理,与图像的其余部分分开,因为我想稍后引用纹理以找出 id 在屏幕。
【问题讨论】:
你在这里说多少个四边形?在片段阶段有gl_PrimitiveID
可用,但如果您绘制超过 256 个四边形(如果每个四边形被分成两个三角形,则为 128 个),您将溢出一般(8 位)单通道图像格式。因此,您将不得不跨多个渠道对您的 ID 进行编码;不是很困难,但此时最好使用单通道 16 位/32 位整数纹理。
我可能会有很多,因为我将使用该系统进行等距游戏,并打算将其用于移动、攻击敌人、拾取物品、穿过门等. 我想我更喜欢 32 位整数纹理的选项,以减少发生任何冲突的可能性,特别是当我想使用高位字节作为当时对象类型的标志时跨度>
【参考方案1】:
为 ID 添加另一个顶点属性并将其传递给您的片段着色器。
您可以设置 Multiple Render Targets (MRT) 将您的 ID 呈现到另一个帧缓冲区附件。
【讨论】:
似乎有点浪费内存。gl_PrimitiveID
会做同样的事情而不添加额外的顶点属性。以上是关于将整数渲染到 GLSL 中的单独纹理的主要内容,如果未能解决你的问题,请参考以下文章
GLSL:无法从 FBO 读取纹理并使用片段着色器渲染到另一个 FBO