0

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シェーダー自体に問題があると思います。

4

1 に答える 1

0

問題は別のものでしたEAGLContexts

GLKTextureLoaderフォントを現在のコンテキスト([EAGLContext currentContext])にロードし、そこから正しく表示します。そして、私のアプリ(2つの異なるコンテキストを使用)ではバグがありました。あるコンテキストでロードして別のコンテキストで表示することがありました(ロード中に変更するのを忘れただけです)。

于 2013-02-12T03:24:24.483 に答える