【发布时间】: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");
}
有人知道我在这里缺少什么吗?谢谢。
【问题讨论】: