1

私は生まれて初めて XNA を見ていますが、読んだ例に戸惑っています。それらには、私が理解できない重複が含まれています:

        protected override void LoadContent()
        {
            _verts1 = new VertexPositionTexture[6];
            _vertexBuffer1 = new VertexBuffer(
                GraphicsDevice,
                typeof(VertexPositionTexture),
                _verts1.Length,
                BufferUsage.None);
            _vertexBuffer1.SetData(_verts1);
        ...
        }

       protected override void Draw(GameTime gameTime)
       {
        ...
            GraphicsDevice.SetVertexBuffer(_vertexBuffer1);
            foreach (EffectPass pass in effect.CurrentTechnique.Passes)
            {
                pass.Apply();
                GraphicsDevice.DrawUserPrimitives<VertexPositionTexture>(
                    PrimitiveType.TriangleStrip,
                    _verts1,
                    0,
                    4);
            }
         ...
        }

描画メソッドで VertexBuffer と VertexPositionTexture の両方が使用される理由がわかりません。VertexBuffer を保持するだけで十分ではありませんか?

GraphicsDevice.SetVertexBuffer への呼び出しを削除し、GraphicsDevice.DrawUserPrimitives だけに依存すると、すべてが同じように見えます。では、VertexPositionTexture[] を使用するだけでうまくいく場合、VertexBuffer を使用する意味は何ですか? :-)

(私はISがポイントだと確信しています-それを見るのを手伝ってください!!! :)

問題解決: くだらない XNA ブック! ありがとう @dowhilefor

4

2 に答える 2

4

まず、頂点を含む配列は DrawUserPrimitives でのみレンダリングできます。これは、フレームごとに配列を変更できるため、頂点が毎回グラフィック カードにプッシュされるため、はるかに遅くなります。Vertexbuffer は、頂点用のストレージを作成し、一度グラフィック カードに配置することです。もちろん、これによりデータは静的になりますが、はるかに高速になります。実際、DrawUserPrimitives は頂点データの VertexBuffer を独自に作成すると思います。

だから、あなたは2つの異なるものを混ぜています。頂点バッファーを作成して設定しましたが、配列をレンダリングしました。DrawPrimitivesを見てください。

于 2011-09-06T11:55:00.813 に答える
1

VertexPositionTexture 頂点はメイン メモリに格納され、頂点バッファは GPU (グラフィックス) メモリに頂点を格納します。

多くの頂点を描画する必要がある場合は、それらを GPU メモリに格納する方が効率的です。

于 2011-09-06T11:54:31.520 に答える