Art of Trampoline Fandango

¿dǝǝɥs ɔıɹʇɔǝlǝ ɟo ɯɐǝɹp spıoɹpuɐ op

Posts Tagged ‘c#’

Correctly running simulation

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

Вполне приемлемый результат:

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

Retro screensaver

I am pretty sure, that everyone remembers the old screensaver "Starfield", which was a part of Windows9x. During weekends I tried to recreate this screensaver, using the XNA Framework.

Here is my version (deep-deep alpha) of how it looks:

System requirements as usual for XNA 3.1 based apps::

  • Must be running at least Windows XP Service Pack 2 (or higher).
  • Must have a video card that supports at least Shader Model 1.1.

Download binaries:
Starfield.scr

How to install:
Simply put *.scr file in your Windows directory (usually it is something like: “c:\Windows”) and use “Control Panel/Appearance and Personalization/Personalization/Change screensaver” dialog to set Starfield as default screensaver.

Don’t forget to install:
.NET Framework 3.5 Redistributable
XNA Framework Redistributable 3.1
in order to get it work!

Interpolation methods

Для симуляции кабелей на базе soft body model я буду использовать бесплатный физический движок PhysX, поддерживаемый разрабатываемый Nvidia (в свое время он сменил несколько названий: Novodex –> Ageia Physics –> Nvidia PhysX). Сама физическая модель мягких тел использует геометрию объекта состоящую из тетраэдров (простейшим примером может служить форма египетских пирамид), для того чтобы просчитать каким образом изменяется форма объекта под воздействием внешних сил (столкновения с другими объектами, гравитация и т. д.).

Для начала неплохо было бы просчитать и сгенерировать вершины и полгины для самого кабеля. С чего начать? Ну, во-первых, на начальном этапе мы всегда знаем точки в пространстве, за которые будет подвешен кабель, и точки в пространстве через которые этот кабель будет проходить (“уворачиваясь” от препятствий на пути: всяческих труб и т. д.). То есть у нас всегда есть набор “контрольных точек”, которые описывают форму кабеля. Далее нам следует получить некоторую кривую, которая опишет как этот наш кабель располагается в пространстве. Мы конечно можем просчитать эту кривую простейшим методом линейной интерполяции, но тогда форма кривой будет грубой, “квадратной”, что совсем нас не устраивает.

Если немного поискать в интернетах, то очень быстро отыщется термин сплайны. :) Вот его то мы и будем использовать при интерполяции наших контрольных точек. В этом случае получится очень гладкая и изящная кривая, – как раз то, что нам нужно для создания mesh для кабеля.

Вот, как это примерно выглядит:

Это то, чем я занимаюсь на данный момент. В следующий раз я расскажу о процессе “выдавливания” профиля вдоль полученной кривой. Таким образом мы получим mesh кабеля с заданным диаметром.

PS: Рабочие бинарники можно скачать тут (у вас должен быть установлен .Net 3.5 и XNA 3.1 frameworks)