Для симуляции кабелей на базе soft body model я буду использовать бесплатный физический движок PhysX, поддерживаемый разрабатываемый Nvidia (в свое время он сменил несколько названий: Novodex –> Ageia Physics –> Nvidia PhysX). Сама физическая модель мягких тел использует геометрию объекта состоящую из тетраэдров (простейшим примером может служить форма египетских пирамид), для того чтобы просчитать каким образом изменяется форма объекта под воздействием внешних сил (столкновения с другими объектами, гравитация и т. д.).
Для начала неплохо было бы просчитать и сгенерировать вершины и полгины для самого кабеля. С чего начать? Ну, во-первых, на начальном этапе мы всегда знаем точки в пространстве, за которые будет подвешен кабель, и точки в пространстве через которые этот кабель будет проходить (“уворачиваясь” от препятствий на пути: всяческих труб и т. д.). То есть у нас всегда есть набор “контрольных точек”, которые описывают форму кабеля. Далее нам следует получить некоторую кривую, которая опишет как этот наш кабель располагается в пространстве. Мы конечно можем просчитать эту кривую простейшим методом линейной интерполяции, но тогда форма кривой будет грубой, “квадратной”, что совсем нас не устраивает.
Если немного поискать в интернетах, то очень быстро отыщется термин сплайны.
Вот его то мы и будем использовать при интерполяции наших контрольных точек. В этом случае получится очень гладкая и изящная кривая, – как раз то, что нам нужно для создания mesh для кабеля.
Вот, как это примерно выглядит:
Это то, чем я занимаюсь на данный момент. В следующий раз я расскажу о процессе “выдавливания” профиля вдоль полученной кривой. Таким образом мы получим mesh кабеля с заданным диаметром.
PS: Рабочие бинарники можно скачать тут (у вас должен быть установлен .Net 3.5 и XNA 3.1 frameworks)