Получение сегментов пути из ID2D1PathGeometry - PullRequest
0 голосов
/ 25 января 2012

В настоящее время я пытаюсь написать небольшой игровой движок на C #, используя SlimDX просто для удовольствия.

Я хочу, чтобы мой мир разрушался, поэтому я должен иметь возможность изменять свою карту.Моя карта в настоящее время основана на векторах и представлена ​​объектом ID2D1PathGeometry (PathGeometry in SlimDX).Этот объект модифицируется с использованием метода CombineWithGeometry ID2D1Geometry (Геометрия в SlimDX).

Для разумного обнаружения столкновений мне нужны знания о точной форме моего объекта ID2D1PathGeometry, например, для вычисленияуглы шаров отскакивая от стен.

Итак, возможно ли получить доступ ко всем или конкретным (по местоположению) сегментам / линиям / точкам моего объекта ID2D1PathGeometry?Или есть другие, более эффективные способы достижения моих целей, например, хранение всех линий и фигур дополнительно в другой структуре данных?

Обратите внимание, что карты на основе растровых изображений не являются подходящим способом, поскольку я не хочу, чтобы память использовалась в качестве ограничения размера карты.

с наилучшими пожеланиями, Emi

1 Ответ

1 голос
/ 25 января 2013

Нет способа получить только те геометрические сегменты, которые близки к определенной точке, но есть способ получить все геометрические сегменты.

  1. Реализация класса, который наследуется от ID2D1SimplifiedGeometrySink.
  2. Создайте экземпляр этого класса и передайте его ID2D1Geometry :: Simplify.

Более подробная информация и пример здесь Как получить данные геометрии путем расширения ID2D1SimplifiedGeometrySink

Если вы заинтересованы в получении только части, близкой к определенной точке, возможно, вы хотели бы:

  1. Создание прямоугольной геометрии вокруг точки интереса.
  2. Пересечь его с вашей геометрией через ID2D1Geometry::CombineWithGeometry, используя D2D1_COMBINE_MODE == D2D1_COMBINE_MODE_INTERSECT.
  3. Получите сток пересеченной геометрии, используя метод выше.

Дополнительная информация: ID2D1Geometry :: CombineWithGeometry method

...