4

これは初心者の質問ですが、広範囲に検索しましたが、答えが見つかりません。

同じウィンドウに描画する必要がある 2 つの別個のメッシュがあり、どちらも DrawUserIndexedPrimitives を使用しています。独自のビューと射影行列を持つ 2 つの BasicEffect インスタンスを使用しています。

ただし、これらがレンダリングされると、2 つを結ぶ線が表示されます。XNA は、それらが同じメッシュの一部であると考えています。それぞれに個別の GraphicsDeviceManager インスタンスを使用する必要がありますか? それは正しくないようです..

protected override void Draw(GameTime gameTime)
{
    GraphicsDevice.Clear(Color.CornflowerBlue);
    GraphicsDevice.VertexDeclaration = declaration;

    effect.Begin();
    effect.View = view;

    foreach (EffectPass pass in effect.CurrentTechnique.Passes)
    {
        pass.Begin();
        GraphicsDevice.DrawUserIndexedPrimitives<VertexPositionNormalTexture>(PrimitiveType.TriangleList, positions1, 0, positions1.Length, index1, 0, index1.Length / 3);
        pass.End();
    }

    effect.End();

    effect2.Begin();
    effect2.View = view2;

    foreach (EffectPass pass in effect2.CurrentTechnique.Passes)
    {
        pass.Begin();
        GraphicsDevice.DrawUserIndexedPrimitives<VertexPositionNormalTexture>(PrimitiveType.TriangleList, positions2, 0, positions2.Length, index2, 0, index2.Length / 3);
        pass.End();
    }

    effect2.End();

    base.Draw(gameTime);
}

位置 1 の最後の三角形は、位置 2 の最初の三角形に結合されます。

あなたが与えることができる助けをありがとう..

4

1 に答える 1

0

ゾム!わかった..

XNA はインデックスをゼロベースとしてのみ使用するように見えます (ほとんどの座標系は 1 ベースですが)、私は次のようなものを持っていました:

int[] index1 = new int[] { 1, 2, 3, ..., n };

これに変更すると、問題が修正されました。

int[] index1 = new int[] { 0, 1, 2, ..., n - 1 };
于 2012-11-12T13:46:00.610 に答える