2016-03-12 4 views
0

Я хотел бы разделить один Texture2D на Texture2D размером x и поместить их в 2D-массив. Размер оригинального Texture2D всегда будет кратным x. Каков самый простой способ сделать это?Разбиение Texture2D на двумерный массив

+0

Создайте новый 'Texture2D's size X и используйте« RenderTarget », чтобы нарисовать правильную часть« основной »текстуры для новых текстур. Вы должны убедиться, что X имеет мощность 2 для максимальной совместимости и эффективности памяти. –

+1

Почему вы хотите это сделать? Вы просто пытаетесь сделать часть текстуры или вам действительно нужно иметь 2 разных текстуры в памяти? – craftworkgames

+0

См. [XNA Почему Texture.GetData одномерная?] (Http://gamedev.stackexchange.com/questions/46775/xna-why-is-texture-getdata-one-dimensional) – LibertyLocked

ответ

0

Вы можете сделать это с помощью Rectangles .. Пойдите через текстуру с помощью двух инструкций (один для координаты x, один для координаты y) и создайте прямоугольники, затем получите данные о цвете для прямоугольника и создайте с ним новую текстуру ,

текстуры = ваш источник текстуры

newTexture = новая часть текстуры поместить в массив

Пример:

for (int x = 0; x < texture.Width; x += texture.Width/nrPieces) 
{ 
    for (int y = 0; y < texture.Height; y += texture.Height/nrPieces) 
    { 
     Rectangle sourceRectangle = new Rectangle(x, y, texture.Width/_nrParticles, texture.Height/_nrParticles); 
     Texture2D newTexture = new Texture2D(GameServices.GetService<GraphicsDevice>(), sourceRectangle.Width, sourceRectangle.Height); 
     Color[] data = new Color[sourceRectangle.Width * sourceRectangle.Height]; 
     texture.GetData(0, sourceRectangle, data, 0, data.Length); 
     newTexture.SetData(data); 
// TODO put new texture into an array 
     } 
    } 

Так все, что вам нужно сделать, это поставить новую текстуру в массив, однако вы хотите. Если вы хотите разбить только по оси X, просто удалите ее для инструкции и измените высоту исходного прямоугольника на texture.Height.

Надеюсь, это поможет!

Смежные вопросы