这是一个菜鸟问题,但我进行了广泛的搜索,找不到答案。
我有两个单独的网格需要在同一窗口中绘制,两者都使用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中的第一个。
感谢您提供任何帮助..
答案 0 :(得分:0)
ZOMG!我明白了..
看起来XNA只将索引视为从零开始(尽管大多数坐标系统都是基于一个),我有类似的东西:
int[] index1 = new int[] { 1, 2, 3, ..., n };
并将其更改为此问题解决了问题:
int[] index1 = new int[] { 0, 1, 2, ..., n - 1 };