Я исчерпал свой мозг и пришел к вам за помощью.Monogame Vertex Buffer действует weird
Недавно я начал работу над проектом для тестирования Monogame и быстро столкнулся с проблемой, я не уверен, что это моя ошибка или Моно.
У меня есть система, в которой уровень содержит кучу добавленных к нему статических экземпляров (геометрия), тогда эта геометрия сохраняется в отдельном классе, чтобы отобразить все. План состоял в том, чтобы использовать вершинные и индексные буферы и использовать GraphicsDevice.DrawPrimitives, но в этом я столкнулся с проблемами.
Верхнее изображение является то, что она должна выглядеть, нижняя один является то, что она на самом деле выглядит следующим образом:
А вот соответствующий код. Прямо сейчас настройка режима на Array работает нормально, но 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");
}
Кто-нибудь знает, что мне здесь не хватает? Благодарю.
Это заставило меня биться головой о стену часами. Спасибо, что ответили на свой вопрос! – shambulator