0

我在 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

有什么想法吗?

4

1 回答 1

0

原来我忘记了这个:

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
于 2012-01-31T15:58:50.663 回答