3

実行時に画像からテクスチャをロードすることについて (PC でのみ実行できることを除いて) 知っておくべきことは何ですか?

4

1 に答える 1

4

私もストリームからテクスチャを独占的にロードしてきましたが、思いつく唯一の「危険」はプリマルチプライされたアルファです。ロード時に各テクスチャを処理するか、事前に乗算されたアルファを無効にしてレンダリングする必要があります。Shawn Hargreaves は、この件に関してすばらしいブログ記事を書きました。コメントで、彼は次のように述べています。

コンテンツ パイプラインを経由しない場合は、自分でフォーマット変換を処理するか、事前に乗算されたアルファを使用しないでください。

したがって、スプライト バッチをBlendState.NonPremultipliedで初期化するとうまくいくはずです。

私のゲームでは、ロード時に各テクスチャを処理しました。

編集:これが私の方法です:

private static void PreMultiplyAlphas(Texture2D ret)
{
    var data = new Byte4[ret.Width * ret.Height];
    ret.GetData(data);
    for (var i = 0; i < data.Length; i++)
    {
        var vec = data[i].ToVector4();
        var alpha = vec.W / 255.0f;
        var a = (Int32)(vec.W);
        var r = (Int32)(alpha * vec.X);
        var g = (Int32)(alpha * vec.Y);
        var b = (Int32)(alpha * vec.Z);
        data[i].PackedValue = (UInt32)((a << 24) + (b << 16) + (g << 8) + r);
    }
    ret.SetData(data);
}

ご覧のとおり、カラー チャネルにアルファを掛けてから、テクスチャに戻すだけです。これがないと、スプライトが明るく/暗く見える可能性がありますか? 彼らがすべきよりも。(免責事項:上記の方法は私が書いたのではなく、私の友人が書いたものです)

于 2012-08-22T19:50:25.243 に答える