1

stage3D で単純な正方形を描いていますが、画像の数字とエッジの品質が本来あるべきほど高くありません。

四角

ここに (小さな) ソース コードの例を示します。ほとんどを 1 つのファイルにまとめました。 http://users.telenet.be/fusion/SquareQuality/
http://users.telenet.be/fusion/SquareQuality/srcview/

シェーダーで「<2d、miplinear、repeat>」を使用しています。テクスチャは256x256 jpg(画像よりも大きい)で、pngも試し、「mipnearest」を試し、ミップマッピングなしで試しました。アンチエイリアスは 4 ですが、10 以上ではまったく役に立ちません...

何か案は?こんにちは、トーマス

4

3 に答える 3

2

backBuffer にアンチエイリアシングを使用していますか?

// Listen for when the Context3D is created for it
stage3D.addEventListener(Event.CONTEXT3D_CREATE, onContext3DCreated);

function onContext3DCreated(ev:Event): void
{
    var context3D:Context3D = stage3D.context3D;

    // Setup the back buffer for the context
    context3D.configureBackBuffer(stage.stageWidth, stage.stageHeight,
                                  0, // no antialiasing (values 2-16 for antialiasing)
                                  true);
}
于 2012-12-07T18:35:09.447 に答える
1

私はそれを見つけました!!!

Starling フォーラムに行ったところ、Starling の Daniel からの回答が見つかりました。

「TRILINEAR を使用している場合は、すでに利用可能な最高の品質を使用しています。もう 1 つ試すことができるのは、Starling の「アンチエイリアシング」値を 16 などの高い値に設定して、それが役立つかどうかを確認することです。」

だから私は、私のサンプルプログラムで、フラグメントシェーダーに引数「線形」を入れた場合にのみトリリニアが使用されるというこの記事に出くわしました:

"tex ft0, v0, fs0 <2d, linear , miplinear, repeat>".

こんにちは、
トーマス

于 2012-12-07T22:16:54.840 に答える
1

リソース テクスチャのサイズが大きすぎると思います。GPU はフラグメント シェーダーでシーンをピクセル単位でレンダリングします。テクスチャのピクセルをレンダリングすると、フラグメント シェーダはテクスチャ UV を表す変数を取得します。GPU は、テクスチャの UV 座標上のピクセルの色を取得します。

ここで、テクスチャ サイズが大きすぎると、画面上の隣接する 2 つのピクセルがテクスチャ リソース上の隣接しないピクセルに対応するため、情報が失われます。たとえば、リソースの 10 分の 1 のテクスチャを描画すると、次のような結果が得られます (各文字は 1 次元でピクセルに対応します)。

Texture:  0123456789ABCDEFGHIJKLM
Screen:   0AK
于 2012-12-07T18:23:52.647 に答える