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