2013-09-30 61 views
0

我有一個圓柱體,我想紋理它使用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)); 

enter image description here

編輯:

新的問題是我有紋理的12張照片(128×128),但最後的圖片與最後一張圖片重疊。我也想紋理36張照片,但最大紋理是在away3D 4k,我該怎麼做?

這裏是一個新的PIC與新代碼:

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); 
} 
+0

但我需要改變在運行時的紋理不同質地:/。另一個問題是最終的bigTexture總是應該是2的大小。 – Andre

+0

那麼在運行時你必須改變這些呢?重繪主紋理,就這些了。另一個問題可以通過使用包含基於複合紋理的位圖的縮放Sprite的'bitmapData.draw()'來解決。適當擴展,搖滾。 – Vesper

+0

請參閱編輯的問題。 – Andre