Как текстурировать цилиндр в XNA4 с несколькими текстурами?

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

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

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

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

Спасибо

1 ответ

Решение

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

Если у вас есть художественные навыки или вы знаете художника, возможно, самый простой способ - заставить их текстурировать карту цилиндра с таким количеством текстур, сколько вы хотите (несколько материалов). Вы хотели бы ваш 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, Это будет более эффективным, но на самом деле не стоит хлопот. В любом случае, если вы не создадите какую-то сумасшедшую систему частиц игрового автомата.

Другие вопросы по тегам