Direct3D или XNA Rendering пользовательских бильярдных шаров

Я работаю над математической игрой, в которой числа (0-99) используются для вопросов и ответов (как стандартные бильярдные шары, но обычно они достигают только 15).

Итак, я думаю, что было бы намного разумнее генерировать, по крайней мере, числа программно, а не моделировать 99 различных мячей в 3DSMax или подобном.

Я работаю на C#/XNA, но могу объяснить и на DX11/C++.

Я не ищу код, а скорее подход: своего рода маркированный список, который выглядел бы так (если бы это было что-то близкое к правильному):

  • Build a shpere in 3DS that is white and has a stripe on it.
    • Or, should the strip be part of the texture I later add?
  • Во время DrawModel измените цвет шара (если сплошной) или ножки (если полосатый).
  • Каким-то образом добавьте номер к мячу так, чтобы он выглядел такого же качества, как и остальная часть мяча.

Возможно, есть волшебный способ взять текстуру и обернуть ее вокруг сферы без каких-либо искажений, а затем я мог бы просто сгенерировать текстуры и наклеить их на сферы. Но, как вы можете догадаться, я не знаю, куда идти.

Спасибо за любое направление!


person Dave    schedule 07.03.2013    source источник


Ответы (2)


Если вы хотите решить эту проблему с помощью XNA / MonoGame / ANX, подход действительно зависит от того, используете ли вы профиль Reach или профиль HighDef.

Что касается профиля охвата, я бы посоветовал:

  1. Создание цели рендеринга
  2. Очистите цель рендеринга до цвета мяча.
  3. Нарисуйте белую полосу на целевом объекте рендеринга.
  4. Нарисуйте число на цели рендеринга
  5. Создайте динамически (или используйте существующую) сетку Sphere
  6. Рендерим сферическую сетку, используя базовый эффект и текстуру rendertarget.

С высоким профилем это случай написания пиксельного шейдера, который:

  1. принимает "белую" текстуру, "цветную" текстуру, цветную и "числовую" текстуру
  2. делает белую текстуру белой
  3. визуализирует цветовую текстуру предоставленного цвета
  4. визуализирует текстуру чисел

(Я бы предложил рендерить числовую текстуру, используя технику, аналогичную той, что использовалась в примере с профилем Reach. Рендеринг текста — это боль, поэтому можно также использовать встроенные функции, где это возможно). Пример перекрашивания предоставлен (бывшей) командой XNA по адресу http://create.msdn.com.

person lzcd    schedule 07.03.2013
comment
Я нашел довольно подробное руководство по этому поводу: msdn.microsoft.com/ en-us/library/jj161095.aspx - person Dave; 08.03.2013

Вы захотите напечатать свои числа на текстурных картах. Эта текстура фактически представляет собой «наклейку», которая наклеивается на часть вашей сферы. Простой способ реализовать простую фиксированную декаль, подобную этой, — написать пиксельный шейдер, который определяет, находится ли точка внутри или вне области декали. Если это не так, вы можете выполнить дополнительный тест, чтобы определить, должен ли пиксель быть белым фоном или цветной полосой.

Вы можете сопоставить декаль со своей сферой, либо указав соответствующие координаты текстуры для каждой вершины, либо, в качестве альтернативы (и, возможно, более аккуратно), вы можете написать пиксельный шейдер, который вычисляет координаты текстуры из координат 3D-модели.

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

person comingstorm    schedule 07.03.2013