У меня есть код, который генерирует пейзаж, превращает его в сетку, а затем отображает его.Управляемый Direct3DX Mesh Vertex/Index limit?
Ландшафт основан на трехмерной таблице и генерирует 4 вершины на положительную запись в таблице. Я определяю размер таблицы в начале.
Проблемы есть
Mesh mesh = new Mesh(indexes.Count/3,vertexes.Count, MeshFlags.Managed, CustomVertex.PositionNormalTextured.Format, device);
где индексы является массивом шорт для индексов и вершин представляет собой массив 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?
Ну, похоже, что разбиение ландшафта на блоки 32x32x32 сработало, странно, что ошибка возникает вообще. –
Как сообщить DirectX9 включить 32-битный индексный буфер? – zionpi