我在OpenGL中加载透明alpha的DDS图像(DXT5)。由于alpha不是预乘,并且不能根据DXT5 specs进行预倍乘,所以我在纹理的可见部分周围形成了薄黑色晕圈,因为我在GPU上执行了一些混合操作。我的问题是:什么是最佳解决方法我的OpenGL渲染器更新每个帧上的场景纹理,加载那些来自IO的场景纹理,所以如果我先解压缩DDS然后预先多层压缩,然后压缩回来,我得到了巨大的开销。我认为另一个选项是添加另一个渲染通道并执行pre - 在片段着色器中进行渲染并渲染到纹理,然后将其用于主通道。由于我已经有通道的下降数量,因此会在整个管道中增加开销。此处还有哪些其他选项?DXT5的预乘alpha值
回答
问题解决了。我有一个损坏的DDS纹理。我在默认情况下在片段着色器中执行的手动预乘法与有效的DXT5完美匹配。
为什么不只是让你的着色器在现场进行alpha预乘,然后做你通常要做的事情?
没有必要将其渲染到纹理。只需总是在您的着色器中预乘,对于全部纹理,您需要预乘。
这没有帮助。这就是为什么我正在尝试变通方法......顺便说一下,它并没有帮助,因为它发生在MSAA中,所以传递的是未加调整的DDS纹理数据得到插值并用细的黑色边框设置这个令人讨厌的光环。我发现GL_NEAREST会将其去除,但如果纹理应用的平面缩放一点,它会增加边缘像素化。 –
您不能多重采样DDS纹理(除非您正在手动*,在这种情况下,它不再是多重采样)。所以目前还不清楚你在说什么。 –
默认情况下,我运行几次pass.The首先是MSAA.I渲染几何在那个传递与DDS纹理。现在当你说我不能这样做,可能是这个问题?我的意思是黑色光环来自事实我在带有alpha通道的DDS上做MSAA? –
- 1. 预乘alpha混合
- 2. 使用Vector4预乘Alpha组合
- 3. 如何知道图像是“预乘Alpha”?
- 4. PNG预乘Alpha,iOS模拟器与iPad
- 5. 读出一个FBO与预乘alpha
- 6. Android设备上的DXT5纹理中缺少alpha通道
- 7. 使用DXT5压缩纹理的Alpha通道
- 8. 使用gdi +在alpha乘以alpha位前乘以一个hdc?
- 9. 乘以其alpha的每个像素Open GLES 1.1(预乘)然后反转
- 10. 有人有一个优化的函数预乘alpha位图吗?
- 11. 编程alpha在OpenGL 2.0中褪色预乘的纹理
- 12. 请解释预乘alpha的工作原理
- 13. FLV预乘alpha通道 - 作为swf添加到网页中?
- 14. 在php中imagecopyresampled - 预乘alpha处理问题
- 15. 从两个文件(RGB + Alpha)创建DDS(DXT5)。命令行工具需要
- 16. PNG的Alpha值
- 17. uitabbaritem的alpha值
- 18. pygame的alpha值
- 19. 如何在没有预乘alpha的情况下获得真实的RGBA或ARGB颜色值?
- 20. OpenGL和相机预览 - 预乘alpha - 混合在一起会得到“过饱和”的颜色
- 21. 如何设置位图预设置Alpha的alpha?
- 22. 预乘以中的R
- 23. 预测乘法的位数
- 24. WPF alpha阈值
- 25. 乘值
- 26. 乘值
- 27. FrontBuffer有alpha值吗?
- 28. UICollectionViewCell alpha值旋转
- 29. UIView alpha值问题
- 30. CSS颜色预乘或不?
“*我的OpenGL渲染器更新每个帧上的场景纹理,加载那些来自IO *”您正在每帧加载和压缩纹理?为什么? –
在这里不能解释,因为它是商业的东西,但这是特殊用途的renderer.It应该这样工作:) –
也就是说,顺便说一句,我在这里使用DDS的原因 - 加快上传时间。对不起,我我没有实时压缩纹理。我加载了准备好的DDSs –