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

У меня есть один цилиндр, и я хотел бы текстурировать его, используя 36 разных растровых изображений. Проблема в том, что если я текстурирую цилиндр только одной текстурой, я вижу, что он растянут, как на картинке здесь:

// 90, 90, are top radius, down radius, 50 is the height, 60 segements w, 60 segments height.


reel = new CylinderGeometry(90,90,50,60,60,false,false,true);
   var textureBase2:Texture2DBase = new BitmapTexture(new reelTexture().bitmapData);
   matrial_Reel = new TextureMaterial(textureBase2);
   matrial_Reel.bothSides = true;

   reelMesh = new Mesh(reel, matrial_Reel);
   reel = null;

   reelMesh.mouseEnabled = true;

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

public static const SIZE : int 1024;
public var img1 : Bitmap;
public var img2 : Bitmap;

var bmp:BitmapData=new BitmapData(SIZE,SIZE,false,0);

//Draw img1 at 0,0
bmp.draw(img1); 

//Draw img2 at 512,0
bmp.draw(img2, new Matrix(1,0,0,1, SIZE/2, 0)); 

Редактировать:

Новая проблема заключается в том, что я текстурировал 12 изображений (128*128), но последние изображения накладываются на последнее изображение. Я также хочу текстурировать 36 изображений, но максимальная текстура составляет 4k в away3d, как бы я это сделал?

Вот новая картинка с новым кодом:

render = new BitmapData ( 2048 , 128 , false, 0 );


        for (var j:int = 0; j < bitmaps.length; j++) 
        { 

            if ( j == 0 ) 
            {
                matrix.translate(0,0);
                matrix.scale(1.1,1);
                render.draw(bitmaps[0], matrix);

            }
            else if ( j == bitmaps.length -1 ) 
            { 
                matrix.translate(128,0);
                //matrix.scale(1,1);
                render.draw(bitmaps[j], matrix);
            }
            else 
            {
                matrix.translate(128,0);
                matrix.scale(1.05,1);
                render.draw(bitmaps[j], matrix);

            }

        }


        var m_finalText:TextureMaterial = new TextureMaterial ( new BitmapTexture( render) ) ;

1 ответ

Решение

Я думаю, что вы должны сделать одну текстуру из 36 ваших растровых изображений, а затем текстурировать этот цилиндр этой текстурой. О том, как объединить много растровых изображений в один - скажем, ваши растровые изображения SIZE_X широкий и SIZE_Y высокий - используйте следующее:

const NUM_X:int=6; // how many bitmaps in a row
var bitmaps:Vector.<BitmapData>; // the bitmaps in a single array
// for easier reference and for looping
var cb:int; var cr:int; var cc:int;
var p0:Point=new Point();
var bigTexture:BitmapData=new BitmapData(NUM_X*SIZE_X,
  (Math.floor((bitmaps.length-1)/NUM_X)+1)*SIZE_Y,false,0); 
// use true for transparency if you want transparent texture
for (cb=0;cb<bitmaps.length;cb++) {
    cr=cb/NUM_X;
    cc=cb-cr*NUM_X;
    p0.x=cc*SIZE_X;
    p0.y=cr*SIZE_Y;
    bigTexture.copyPixels(bitmaps[cb],bitmaps[cb].rect,p0);
}
Другие вопросы по тегам