DrawUserIndexedPrimitives用于单独的网格物体

时间:2012-11-12 01:42:04

标签: xna c#-3.0 xna-3.0

这是一个菜鸟问题,但我进行了广泛的搜索,找不到答案。

我有两个单独的网格需要在同一窗口中绘制,两者都使用DrawUserIndexedPrimitives。我正在使用两个具有自己视图的BasicEffect实例&投影矩阵。

然而,当渲染这些时,有一条线将两者连接在一起。 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中的第一个。

感谢您提供任何帮助..

1 个答案:

答案 0 :(得分:0)

ZOMG!我明白了..

看起来XNA只将索引视为从零开始(尽管大多数坐标系统都是基于一个),我有类似的东西:

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

并将其更改为此问题解决了问题:

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