Создание пользовательской сетки в C #, управляемой DirectX

StackOverflow https://stackoverflow.com/questions/1280036

Вопрос

Мне нужно создать 3D-сетку DirectX во время выполнения использование управляемого DirectX из C #.Мне не удалось найти никакой информации о том, как это сделать.

  1. Нет, я не могу использовать программу 3D-моделирования для создания своих объектов.Они должны быть точного размера и формы, и у меня нет никакой информации о размере или форме до времени выполнения.
  2. Нет, я не могу создать модель на основе существующих возможностей DirectX mesh.(Простой пример:DirectX позволит вам легко моделировать карандаш, используя сетку в виде конуса и сетку в виде цилиндра.Конечно, вы должны носить с собой две сетки для карандаша, а не только одну, и правильно расположить и сориентировать каждую.Но вы даже не можете сделать модель карандаша, разрезанную вдоль пополам, поскольку в ней нет сетки в виде полуцилиндра или полуконуса.)
  3. Во время выполнения у меня уже есть все вершины, и я знаю, какие из них соединить, чтобы получились необходимые треугольники.
  4. Все, что мне нужно, - это сплошной цвет.Мне не нужна текстурная карта.

Можно получить сетку сферы, используя этот вызов DirectX:
Mesh sphere = Mesh.Sphere(device, sphereRadius, sphereSlices, sphereStacks);
Эта сетка создается во время выполнения.

Что мне нужно знать, так это как создать аналогичную функцию:
Mesh shape = MakeCustomMesh(device, vertexlist, trianglelist);
где два списка могут быть любым подходящим контейнером / форматом.

Если кто-нибудь может указать мне на пример кода managed DirectX (C #), даже если он просто строит сетку из 3 жестко закодированных треугольников, это было бы большим преимуществом.

Это было полезно?

Решение

Есть несколько примеров кода, показывающих, как это сделать на Многомерная информация.Это создает сетку с несколькими подмножествами - если вам это не нужно, это еще проще.

По сути, вы просто создаете сетку:

Mesh mesh = new Mesh(numIndices, numVerticess, MeshFlags.Managed, CustomVertex.PositionColored.Format /* you'll need to set this */ , device); 

Затем вы можете захватить буфер вершин сетки и буфер индексов и перезаписать его, используя:

IndexBuffer indices = mesh.IndexBuffer;
VertexBuffer vertices = mesh.VertexBuffer;

Затем соответствующим образом заполните индексы и вершины.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top