【问题标题】:Alpha channel with DXT5 compressed texture带有 DXT5 压缩纹理的 Alpha 通道
【发布时间】:2012-02-22 01:12:52
【问题描述】:

我在 OS X 上使用 OpenGL 编写了一个测试程序,该程序加载 PNG,使用 libsquish (http://code.google.com/p/libsquish/) 在内存中将其压缩为 DXT5,并对平面进行纹理处理。

当我上传包含 Alpha 通道但没有像素具有 Alpha 值而不是完全不透明的图像时,它会正确显示:http://i.imgur.com/nElZ8.png

给定相同的图像,但黑色部分被替换为透明度,这是我得到的输出:http://i.imgur.com/8Ld3y.png

代码并不漂亮,它是一个拼凑的概念证明:

  1. C++ 源代码:http://pastebin.com/m0RqpgUS
  2. 顶点着色器:http://pastebin.com/QyaWCaTk
  3. 片段着色器:http://pastebin.com/KEuFJ83C
  4. 测试图片:http://dl.dropbox.com/u/4597377/images.zip

有什么想法吗?

【问题讨论】:

  • 如果您使用离线工具而不是您在 Google Code 上找到的某个库来生成压缩数据,会发生什么?
  • 您确定您的 alpha 值始终为 255 吗?我每天都使用 squish,它确实可以保留 alpha。您可以发布用于创建正确图像的“参考”代码吗?

标签: c++ opengl image-compression


【解决方案1】:

原来我忘了这个:

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

【讨论】:

    猜你喜欢
    • 2013-06-28
    • 2018-06-26
    • 2010-10-30
    • 1970-01-01
    • 2010-09-30
    • 2017-01-27
    • 2013-10-13
    • 2016-03-19
    • 2015-09-15
    相关资源
    最近更新 更多