Визуализатор световых шоу XNA, WPF - PullRequest
0 голосов
/ 09 июня 2010

Привет всем,

Я разрабатываю программное обеспечение для управления световым шоу (по протоколу DMX), я использую C # и wpf для разработки своего основного программного обеспечения (.net 4.0)

Чтобы помочь людям предварительно просмотреть свое шоу, я бы хотел сделать живой 3D-визуализатор ...

Сначала я подумал, что мог бы использовать wpf 3D для создания визуализатора, но мне нужно работать со светом.

Мое основное приложение должно отправлять свойство (угол луча, ориентация (X, Y), положение (X, Y), кисть (цвет, форма, эффект)) в 3D-визуализатор

Но я хотел бы иметь возможность перемещать свет (положение в сцене) с помощью мыши во время выполнения и иметь возвращаемое значение ...

Итак ..

XNA - самый простой способ сделать это?

Можете ли вы помочь мне в этом:

  • Генерация света (ориентация, растровый фильтр перед светом)

  • Динамически движущийся объект с мышью и возвращаемая позиция

  • Динамически добавить или удалить прибор

Весь ваш совет, пример, пример очень приветствуются ... Я не рассчитываю на идеальный результат в первый раз, но мне нужно понять основные концепции для этого

Спасибо !!

1 Ответ

1 голос
/ 10 июня 2010

XNA не содержит никаких функций для управления «сценой» - вам придется реализовать это самостоятельно. Например: вы можете создать класс Light, содержащий информацию о вашем источнике света (положение, ориентация и т. Д.), А затем иметь их List<Light>, которые вы обновляете и визуализируете сами.

Теперь я предполагаю, что у вас есть 3D-модель «Света» (например, металлическая коробка с лампочкой), а также 3D-модель сцены. И что вы можете понять, как их визуализировать - в XNA есть множество онлайн-учебников для простого рендеринга моделей. Вот отправная точка .

Таким образом, ваше третье требование («Динамически добавлять или удалять приборы») должно быть довольно простым, если вы можете визуализировать вещи. Просто добавьте и удалите Lights из своего списка на основе пользовательского ввода. См. Входное пространство имен .

И ваше второе требование («Динамически перемещать объект с помощью мыши и получить позицию взамен») также должно быть простым. Если вы хотите, чтобы пользователь перемещал источники света, щелкая и перетаскивая их, просто следите за положением мыши между кадрами и применяйте это в качестве корректировки положения (или поворота) нажатого источника света.

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

Я предполагаю, что пользователь сам щелкнет на Light (металлический ящик), чтобы переместить / повернуть его. Если бы вы предпочли, чтобы пользователь щелкнул и перетащил конечную точку источника света (место, которое он проецирует) - это сложнее. Одна мысль, которая приходит на ум: Пересечь луч от вашего Света со сценой, чтобы найти центр спроецированного пятна. В этот момент нарисуйте фиктивный «дескриптор» объекта (например, сферы), который пользователь может щелкнуть и перетащить. Когда пользователь закончит перетаскивание, определите новую ориентацию источника света, чтобы сделать его новым центром.

Наконец, ваше первое требование («Генерация света (ориентация, растровое изображение как фильтр перед светом)») является сложным. Насколько я понимаю, вы хотите нарисовать конечную точку луча света на вашей сценической модели? Если это так, то, что вы ищете, называется Projective Texture Mapping . Предположительно, у вас будет круговая текстура для основных источников света и, возможно, другие текстуры для гобо.

Быстрый и грязный способ сделать это состоял бы в том, чтобы нарисовать вашу сценическую модель, один раз для каждого источника света, с аддитивным смешиванием (чтобы каждый источник света, добавленный вместе с другими источниками света и черным, не имел эффекта), с цветом установите любой желаемый цвет света и с черно-белой текстурой (белый кружок на черном фоне), нарисованной с помощью TextureAddressMode.Clamp, с шейдером, который рисует текстуру с помощью проекционного наложения текстур, настроенного с помощью света в качестве точки проекции.

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