我使用UIKit
(簡化的)生成文本作爲圖像:GLKTextureLoader負載透明紋理出乎意料
UIGraphicsBeginImageContextWithOptions(textureSize, NO, 0);
[variant.text drawInRect:CGRectIntegral(necessaryRect) withFont:textFont lineBreakMode:UILineBreakModeWordWrap alignment:UITextAlignmentCenter];
UIImage *img = UIImagePNGRepresentation(UIGraphicsGetImageFromCurrentImageContext());
UIGraphicsEndImageContext();
然後我將其保存到高速緩存目錄和負載從文件與GLKTextureLoader
(-textureWithContentsOfFile:options:error:
; options = nil
)。
加載後,我看到「白色文物」 - 文字周圍的白色像素,尤其是在光線不直的時候(對紋理表面施加一些旋轉),尤其清晰可見。
我檢查生成的圖像 - 在圖像編輯器中打開它們&添加了黑色背景 - 除黑色之外,我看不到任何東西。然後我檢查了紋理 - 在文本的背後添加了一個紋理 - 只是填充了黑色。在我的3D對象上,我看到了文本字母周圍的「白色陰影」,就像一些邊框一樣。
effect.textrue2d0.envMode = GLKTextureEnvModeDecal; // just text
...
effect.texture2d0.envMode = GLKTextureEnvModeModulate; // black bg gexture + text
effect.textrue2d1.envMode = GLKTextureEnvModeDecal;
...
glEnable(GL_BLEND); // always
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
如果我加載啓用GLKTextureLoaderApplyPremultiplication
質感,問題是固定的,但文字看起來不那麼明顯的(使用像不是100%黑色)。
將底部貼圖(2d0)更改爲envMode
至GLKTextureEnvModeReplace
也將修復白色像素,但會移除光線。
我在做什麼錯?
更新:
我最近寫我自己的着色器。沒有alpha預加載的紋理沒有問題。所以,我期望GLKit着色器本身存在問題。