绘制一条线,绘制一条线列表......为什么后者无效呢?

时间:2015-10-13 11:05:47

标签: c# 3d xna render monogame

画一条线:

foreach (Line line in lineList) //Draw all lines in lineList
{
    if(line.V)//Is the current line visible?
    {
        Globals.graphics.GraphicsDevice.SetVertexBuffer(line.L);
        foreach (EffectPass pass in line.E.CurrentTechnique.Passes)
        {
            pass.Apply();
            Globals.graphics.GraphicsDevice.DrawPrimitives(PrimitiveType.LineStrip, 0, line.L.VertexCount - 1);
        }
    }
}

line.L是顶点缓冲区)

绘制立方体:

foreach (Cube cube in cubeList)
{
    if (cube.V)
    {
        foreach (VertexBuffer line in cube.LB)//Draw each line in the cube
        {
            Globals.graphics.GraphicsDevice.SetVertexBuffer(line);
            foreach (EffectPass pass in cube.E.CurrentTechnique.Passes)
            {
                pass.Apply();
                Globals.graphics.GraphicsDevice.DrawPrimitives(PrimitiveType.LineStrip, 0, line.VertexCount - 1);
            }
        }
    }
}

第一个起作用,第二个起作用。 绘制立方体的代码与绘制线条的代码基本相同。 线和立方体之间的显着差异在于立方体具有顶点缓冲区列表。这为绘制多维数据集的代码添加了一个简单的foreach。

这个改变的线条图代码用于绘制立方体中的第一个条带:

foreach (Line line in lineList) //Draw all lines in lineList
{
    if(line.V)//Is the current line visible?
    {
        Globals.graphics.GraphicsDevice.SetVertexBuffer(cubeList.First().LB.First());
        foreach (EffectPass pass in line.E.CurrentTechnique.Passes)
        {
            pass.Apply();
            Globals.graphics.GraphicsDevice.DrawPrimitives(PrimitiveType.LineStrip, 0, cubeList.First().LB.First().VertexCount - 1);
        }
    }
}

对于上面的代码,我只是将顶点缓冲区设置为多维数据集的顶点缓冲区列表中的第一个(cube.LB

我无法弄清楚绘制多维数据集的代码存在什么问题......

cube中的顶点缓冲区被定义为新VertexBuffer(Globals.graphics.GraphicsDevice, typeof(VertexPositionColor), 10, BufferUsage.WriteOnly);该代码中的10个变化,因为立方体是使用4个不同的线条绘制的。 第一个,有10个顶点,是立方体上面的一条线条,其中一条边线用于到达底部和底面。 还有3个缓冲区,每个缓冲区有2个顶点。它们是剩下的三个边缘。

enter image description here

我无法找到绘制多维数据集的代码的问题。当"手动"在用于绘制线条的代码中输入立方体的顶点缓冲区,它们被正确绘制。这表明在多维数据集类中顶点缓冲区列表或顶点缓冲区列表没有问题......

0 个答案:

没有答案