Как текстурировать цилиндр в XNA4 с несколькими текстурами? - PullRequest
2 голосов
/ 17 августа 2011

По сути, я пытаюсь покрыть барабан игрового автомата (модель белого цилиндра) множеством равномерно расположенных текстур вокруг экстерьера. Программа будет работать только под Windows, а текстуры будут динамически загружаться во время выполнения вместо использования конвейера контента. (Многоэкранная настройка на основе Windows с XNA из примера Microsoft)

Большинство примеров, которые я могу найти в Интернете, относятся к XNA3 и до сих пор кажутся мне бессмысленными.

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

Может быть, есть хорошая книга, которая может правильно описать, как работает текстурирование в XNA (в частности, в 4.0)?

Спасибо

1 Ответ

2 голосов
/ 18 августа 2011

У вас есть несколько вариантов.Это зависит от двух вещей: будет ли модель загружена или сгенерирована во время выполнения, и будут ли ваши многочисленные текстуры объединены в одну или сохранены индивидуально.

Если у вас есть навыки рисования или вы знаете художника, вероятно, самый простой подход - этозаставьте их текстурировать карту цилиндра с таким количеством текстур, сколько вы хотите (несколько материалов).Вы хотите, чтобы у вашего Model была одна сетка (ModelMesh) и один материал (ModelMeshPart) на каждую текстуру.Это при условии, что цилиндры всегда имеют фиксированное количество текстур!Затем, чтобы поменять текстуры во время выполнения, вы должны выполнить итерацию по коллекции ModelMesh.Effects, привести каждую к BasicEffect и установить ее свойство Texture.

Если вы не можете изменить модель, вам придется сгенерировать ее.Вот пример этого на сайте AppHub: http://create.msdn.com/en-US/education/catalog/sample/primitives_3d. Вероятно, он не генерирует текстурные координаты, поэтому вам необходимо добавить их.Если вам нужно 5 изображений на цилиндр, вы должны убедиться, что число сегментов кратно 5, а координата V должна изменяться от 0 до 1,5 раз по мере наматывания на цилиндр.Чтобы сохранить ваши текстуры индивидуальными с помощью этой техники, вам нужно будет нарисовать цилиндр из 5 кусков, каждый раз устанавливая GraphicsDevice.Textures[0] в соответствии с вашей текущей текстурой.

При обоих методах можно было бы нарисовать цилиндрв одном вызове отрисовки, но вам нужно объединить ваши текстуры в одну, используя Texture2D.GetData и Texture2D.SetData.Это будет более эффективным, но на самом деле не стоит хлопот.В любом случае, если вы не создадите какую-то сумасшедшую систему частиц игрового автомата.

...