Рекомендуемые аспекты 3D программирования для Light / Laser Show Simulator? - PullRequest
2 голосов
/ 06 октября 2009

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

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

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

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

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

Ответы [ 3 ]

1 голос
/ 06 октября 2009

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

1 голос
/ 06 октября 2009

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

0 голосов
/ 06 октября 2009

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

...