Управляемый лимит вершин/индексов сетки Direct3DX?

У меня есть код, который генерирует ландшафт, преобразует его в сетку и затем визуализирует.

Ландшафт основан на трехмерной таблице и создает 4 вершины для каждой положительной записи таблицы. Я определяю размер таблицы в начале.

Проблема есть

Mesh mesh = new Mesh(indexes.Count/3,vertexes.Count, MeshFlags.Managed, CustomVertex.PositionNormalTextured.Format, device);

где indexes — это массив шорт для индексов, а вершины — это массив CustomVertex.PositionNormalTextured, содержащий мои вершины.

Мой код отлично работает для небольших размеров (например, 32x32x32), но для чего-то вроде 64x64x64 он падает в приведенной выше строке со следующей ошибкой.

Microsoft.DirectX.Direct3D.Direct3DXException was unhandled
Message=Error in the application.
Source=Microsoft.DirectX.Direct3DX
ErrorCode=-2005530516
ErrorString=D3DERR_INVALIDCALL
StackTrace:
   at Microsoft.DirectX.Direct3D.Mesh..ctor(Int32 numFaces, Int32 numVertices, MeshFlags options, VertexFormats vertexFormat, Device device)
   at mycode.Form1.Landscape() in d:\Files\My Documents\Visual Studio 2010\Projects\mycode\mycode\Form1.cs:line 488
   at mycode.Form1.GenerateGeometry() in d:\Files\My Documents\Visual Studio 2010\Projects\mycode\mycode\Form1.cs:line 223
   at mycode.Form1..ctor() in d:\Files\My Documents\Visual Studio 2010\Projects\mycode\mycode\Form1.cs:line 40
   at mycode.Program.Main() in d:\Files\My Documents\Visual Studio 2010\Projects\mycode\mycode\Program.cs:line 20
   at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
   at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
   at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
   at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()
  InnerException: 

В момент сбоя количество индексов составляет 231 480, а количество вершин - 154 320.

не лучше ли было бы разделить его на 64 меша, по одному на каждый Z-уровень?


person Nick Udell    schedule 13.01.2011    source источник
comment
Ну, разбиение ландшафта на блоки 32x32x32 вроде сработало, странно, что ошибка вообще возникает.   -  person Nick Udell    schedule 23.01.2011
comment
Как указать DirectX9 включить 32-битный индексный буфер?   -  person zionpi    schedule 21.01.2015


Ответы (1)


Похоже, ваша сетка по умолчанию использует 16-битный индексный буфер. Я больше не могу найти документацию для управляемого DirectX (MS удалила его почти везде), но посмотрите, можете ли вы явно указать ему использовать 32-битный индексный буфер.

person Evan L.    schedule 29.03.2011