4

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

我有两个单独的网格需要在同一个窗口中绘制,都使用 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 中的第一个三角形。

谢谢你提供的所有帮助..

4

1 回答 1

0

ZOMG!我知道了..

看起来 XNA 只将索引作为从零开始的(即使大多数坐标系统都是从一开始的),我有这样的事情:

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

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

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