我正在尝试在 Android 上的 OpenGL ES 1.x 中创建一个模拟仪表。我使用绿色中点定理创建了一个简单的圆圈。现在我想在圆圈周围放置一些数字用于仪表读数。由于 OpenGL 没有本机文本渲染 API,我试图加载这样的 PNG 图像,上面有读数,图像的其余部分是透明的。
现在我必须将哪些参数传递给 glBlendFunc() 函数来实现这一点。我尝试了许多不同的组合,但没有任何效果。
这是Android上的常见问题。您不能使用 Android Bitmap 类来加载其中具有透明区域的纹理。这是因为 Bitmap 遵循 Porter-Duff 的 alpha 混合规范,并且 Bitmap 通过将图像存储为预乘格式(A、R*A、G*A、B*A)来优化具有每个像素 alpha 的图像。这对于 Porter-Duff 非常有用,但对于需要非预乘 (ARGB) 格式的 OpenGL 则不然。这意味着 Bitmap 类只能用于完全不透明(或没有每像素 alpha)的纹理。本文详细介绍:
只需尝试传递 Alpha Blending 值,它们是:
glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
我希望它有所帮助。
我不认为(即使在 2.2)Alpha PNG 是 Android 位图加载算法的问题。