1

SamplerState.LinearWrap私たちはゲーム内で多くのものを並べて表示するために使用します。私たちのゲームは単一のオブジェクトを共有し、次のようSpriteBatchに呼び出します。Begin()

_spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.LinearWrap, DepthStencilState.None, _rasterState);

これは、WindowsのXNAおよびiOSのMonoGameに最適です。

問題は、Androidで、LinearWrapがオンになっている場合、ラップする必要がない方法で描画されている場合でも、2つのサイズのテクスチャの非累乗が黒い長方形としてレンダリングされることです。(デフォルト)に切り替えるとSamplerState.LinearClamp、これらのテクスチャはAndroidで黒くレンダリングされなくなります。通常、2の累乗ではないテクスチャは、(他のプラットフォームで)それらを並べて表示しようとすると、次に大きい2の累乗まで空のスペースを残します。

これはAndroidのOpenGLの制限ですか、それともMonoGameの問題ですか?すべてのテクスチャのサイズを2の累乗に変更するのは嫌ですが、それが唯一のオプションである場合(または非常に正当な理由がある場合)にサイズを変更します。

4

2 に答える 2

2

MonoGame を掘り下げると、ESTexture2D.cs で次のことがわかりました。

                _width = imageSource.Width;
                _height = imageSource.Height;

                // There are rules for npot textures that we must abide by (wrap = ClampToEdge and filter = Nearest or Linear)
                if (!MathHelper.IsPowerOfTwo(_width) || !MathHelper.IsPowerOfTwo(_height))
                {
                    //filter = ALL11.Linear;
                    //wrap = ALL11.ClampToEdge;
                    _width = (int)Math.Pow(2, Math.Min(10, Math.Ceiling(Math.Log10(imageSource.Width) / Math.Log10(2))));
                    _height = (int)Math.Pow(2, Math.Min(10, Math.Ceiling(Math.Log10(imageSource.Height) / Math.Log10(2))));
                }

filterとの変更をコメントアウトしwrap、サイズを 2 のべき乗になるように調整しました。

これで問題は解決しましたが、MonoGame の有効な修正かどうかはわかりません。を使用した場合の影響はわかりませんSamplerState.LinearClamp

于 2012-08-01T18:43:59.210 に答える
2

これは、develop3d ブランチで修正されていると思います。

D.

于 2012-08-06T17:21:27.337 に答える