You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenGL中GL_RGB32UI整数纹理采样时texture函数始终返回0如何解决

问题根因

你创建的是无符号整数纹理(GL_RGB32UI),但着色器中使用了适配浮点/归一化纹理的普通sampler2D采样器,类型不匹配导致采样结果异常。你之前通过glReadPixels能读到正确数据,说明纹理本身的存储和写入逻辑没有问题,问题仅出在着色器采样环节的类型不匹配。


修复步骤

  • 替换采样器类型
    把着色器里的采样器声明修改为无符号整数纹理专用的usampler2D:
    // 错误写法:普通sampler2D仅支持浮点/归一化纹理
    // uniform sampler2D gPixelIDsTex;
    // 正确写法:usampler2D对应无符号整数纹理,isampler2D对应有符号整数纹理
    uniform usampler2D gPixelIDsTex;
    
  • 调整采样逻辑
    使用usampler2D采样后返回的结果本身就是uvec3类型,无需额外强制类型转换:
    uint objID = texture(gPixelIDsTex, fragData.TexCoords).r;
    
  • 修复调试显示逻辑
    直接将大于等于1的整数ID输出到FragColor会被OpenGL默认的颜色归一化逻辑截断为1,显示为纯白色,很容易被误判为数值为0。调试时需要先做数值映射:
    // 除数可根据你实际的objectID最大值调整
    float normalizedID = float(objID) / 255.0;
    FragColor = vec4(normalizedID, normalizedID, normalizedID, 1.0);
    

内容的提问来源于stack exchange,提问作者stackoverflow_usr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 03:45:08