C# 三维立方体缓慢渲染

C# 三维立方体缓慢渲染,c#,3d,xna,camera,render,C#,3d,Xna,Camera,Render,在重写block.cs类后,我的上一个问题得到了解决,但是,我还有一个最后的问题: 我有一个256个块的列表,每个块有12个三角形和36个顶点。当我使用以下方法渲染这些块时: blocks.ForEach(block => block.Draw(spriteBatch, camera, effect)); 它们确实渲染,但游戏速度急剧下降,约为0.25 FPS。每个块都有不同的纹理。3072个三角形和9216个顶点是否会造成这么大的问题 我的渲染代码: public void R

在重写block.cs类后,我的上一个问题得到了解决,但是,我还有一个最后的问题:

我有一个256个块的列表,每个块有12个三角形和36个顶点。当我使用以下方法渲染这些块时:

blocks.ForEach(block => block.Draw(spriteBatch, camera, effect));
它们确实渲染,但游戏速度急剧下降,约为0.25 FPS。每个块都有不同的纹理。3072个三角形和9216个顶点是否会造成这么大的问题

我的渲染代码:

    public void Render(GraphicsDevice graphicsDevice)
    {
        if (!isConstructed) ConstructBlock();

        using (var buffer = new VertexBuffer(graphicsDevice, VertexPositionNormalTexture.VertexDeclaration, NUMVERTICES, BufferUsage.WriteOnly))
        {
            buffer.SetData(vertices);
            graphicsDevice.SetVertexBuffer(buffer);
        }

        graphicsDevice.DrawUserPrimitives(PrimitiveType.TriangleList, vertices, 0, NUMTRIANGLES);
    }
我的立方体的绘制代码:

    public void Draw(SpriteBatch spriteBatch, Camera camera, BasicEffect effect)
    {


        effect = new BasicEffect(spriteBatch.GraphicsDevice)
        {
            TextureEnabled = true,
            Texture = Texture,
            View = camera.View,
            Projection = camera.Projection,
            World = Matrix.Identity
        };


        effect.EnableDefaultLighting();
        foreach (var pass in effect.CurrentTechnique.Passes)
        {
            pass.Apply();
            Render(spriteBatch.GraphicsDevice);
        }
    }

我怀疑有人会涉过你的密码。使用调试器。在每个帧中创建顶点缓冲区(甚至多个)是一系列可能导致性能问题的工作。创建一次缓冲区并重用它。也许你只需要为所有立方体设置一个缓冲区,然后改变世界矩阵。