UIKit
(簡略化)を使用して画像としてテキストを生成します:
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
)を使用してファイルからロードします。
ロードした後、「白いアーティファクト」が表示されます。テキストの周りの白いピクセルは、光がまっすぐでない場合(テクスチャのある表面に回転を適用している場合)に特によく見えます。
生成された画像を確認しました-画像エディタで開き、黒い背景を追加しました-黒い色以外は何も見えません。次に、テクスチャをチェックしました-テキストのテクスチャの後ろにもう1つのテクスチャを追加しました-単に黒い色で塗りつぶしました。また、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%黒色が使用されていないなど)。
envMode
下部のテクスチャ(2d0)をに変更するGLKTextureEnvModeReplace
と、白いピクセルも修正されますが、光は削除されます。
私は何が間違っているのですか?
アップデート:
最近、自分のシェーダーを作成しました。また、アルファ事前乗算なしでロードされたテクスチャには問題はありません。したがって、GLKitシェーダー自体に問題があると思います。