Рекомендуемые аспекты 3D-программирования для симулятора светового / лазерного шоу?

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

  •  20-09-2019
  •  | 
  •  

Вопрос

Эй, ребята, я хотел бы разработать редактор и симулятор светового / лазерного шоу, и для этого, конечно, я собираюсь немного освоить графическое программирование.Я подумываю об использовании C # и XNA.

Мне просто было интересно, какие аспекты графического программирования мне следует исследовать или сосредоточиться на них, учитывая проект, над которым я работаю.Я новичок в графическом программировании, поэтому я мало что знаю об этом, но, например, я представляю себе что-то, что я мог бы изучить, было бы (возможно?) должно быть объемное освещение.

Например, каким был бы практический способ рендеринга "лазера" различной ширины / цвета?Я где-то читал, что можно просто нарисовать цилиндр и применить к нему шейдер, я хотел бы подтвердить, что это правильный способ.

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

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

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

Решение

Ответ на этот вопрос зависит от уровня сложности, который вам необходим при моделировании отображения.Компьютерная графика - это, в конечном счете, симуляция переноса света;это моделирование может быть таким же сложным, как вычисление доли лазерного излучения, отклоняемого частицами в атмосфере к точке зрения наблюдателя, или таким же простым, как проведение линии.Попробуйте эффект цилиндра и посмотрите, работает ли он для вашего проекта.Если вам нужно что-то более сложное, ознакомьтесь с программированием шейдеров (например, с использованием Nvidia Cg) и объемным затенением, как вы упомянули;также могут быть полезны эффекты свечения после обработки.Я полагаю, что для OpenGL существует ограничение в 8?источников света в сцене, но вы могли бы обойти это ограничение, выполнив свою собственную логику затенения.

Другие советы

Ну, если это просто для моделирования светового шоу, я бы предположил, что вам понадобится множество пользовательских световых эффектов - так что независимо от того, решите ли вы использовать XNA или обычный DirectX, вам лучше всего начать с изучения языков шейдеров и того, как программировать различные световые эффекты с их помощью.Как только вы сможете воспроизвести желаемый тип лазерного освещения, вы сможете поэкспериментировать с полигонами, которые хотите использовать для представления лазеров.(Я использовал цилиндрический метод в некоторых своих работах в личных целях, но я не уверен, насколько хорошо прямые цилиндры подойдут для ваших целей).

Хотя это быстрее, я думаю, что лучше не использовать ванильное аппаратное освещение из-за его ограничений.Пиксельные шейдеры могут помочь вам в решении вашей задачи.Также вы можете выбрать OpenGL из-за переносимости и его ясности в методах рендеринга.Я работал над Direct3D в течение нескольких лет, прежде чем перейти на OpenGL.Функции и состояния OpenGL проще в освоении, а методы рендеринга (например, многопроходный рендеринг) намного понятнее.Если вам нравится писать код на C # (что я не рекомендую для этих задач), вы можете использовать библиотеку CsGL для доступа к функциям OpenGL.

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