【问题标题】:Monogame Vertex Buffer acting weirdMonogame Vertex Buffer 表现怪异
【发布时间】:2014-02-11 04:53:33
【问题描述】:

我已经筋疲力尽,来找你帮忙了。

我最近开始做一个项目来测试 Monogame,很快就遇到了一个问题,我不确定是我的错还是 Mono 的错。

我有一个系统,其中一个关卡添加了一堆静态实例(几何),然后这个几何被保存到一个单独的类中来渲染它。计划是使用顶点和索引缓冲区并使用 GraphicsDevice.DrawPrimitives,但这是我遇到问题的地方。

上图是应该的样子,下图是实际的样子:

这里是相关代码。现在设置模式为Array效果很好,但是Buffer搞砸了,所以我知道顶点添加对了,数组对了,效果对了,只是buffer错了。

    public void End()
    {
        _vertices = _tempVertices.ToArray();
        _vCount = _vertices.Length;
        _indices = _tempIndices.ToArray();
        _iCount = _indices.Length;

        _vBuffer = new VertexBuffer(_graphics, typeof(VertexPositionColorTexture),
            _vCount, BufferUsage.WriteOnly);
        _vBuffer.SetData(_vertices, 0, _vCount);

        _iBuffer = new IndexBuffer(_graphics, IndexElementSize.ThirtyTwoBits,
            _iCount, BufferUsage.WriteOnly);
        _iBuffer.SetData(_indices, 0, _iCount);  

        _tempIndices.Clear();
        _tempVertices.Clear();

        _primitiveCount = _iCount / 3;

        _canDraw = true;
    }

    public void Render()
    {
        if (_canDraw)
        {
            switch (DrawMode)
            {
                case Mode.Buffered:
                    _graphics.Indices = _iBuffer;
                    _graphics.SetVertexBuffer(_vBuffer);

                    _graphics.DrawPrimitives(PrimitiveType.TriangleList, 0, _primitiveCount);
                    break;

                case Mode.Array:
                    _graphics.DrawUserIndexedPrimitives<VertexPositionColorTexture>
                        (PrimitiveType.TriangleList, _vertices, 0, _vCount,
                        _indices, 0, _primitiveCount);
                    break;
            }
        }
        else
            throw new InvalidOperationException("End must be called before this can be rendered");
    }

有人知道我在这里缺少什么吗?谢谢。

【问题讨论】:

    标签: c# graphics monogame


    【解决方案1】:

    经过数小时的尝试,我想通了。我可能真的是个白痴。

    我没有使用索引绘图,而是尝试绘制非索引图元。

    在 Render() 方法中,我只是简单地改变了

    _graphics.DrawPrimitives(PrimitiveType.TriangleList, 0, _primitiveCount);
    

    到:

    _graphics.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, _vCount, 0, _primitiveCount);
    

    瞧,现在一切正常。

    【讨论】:

    • 这也让我把头撞在墙上好几个小时。感谢您发布自己问题的答案!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    • 2012-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多