2010-06-02 42 views
1

我在處理中遇到了對象的translate()函數以及一般對象的困難。我仔細檢查了這些例子,並嘗試複製它們實例化對象的方式,但似乎無法讓屏幕上出現的圖形不會移動它們。我使用嵌套的for循環將對象實例化爲數組,並期望渲染對象的網格。但是,什麼都沒有呈現。處理中的形狀對象,翻譯各個形狀

我嵌套的循環結構來實例化磚:

for(int i=0; i<102; i++){ 
    for(int j=0; j<102; j++){ 
     tiles[i][j]=new tile(i,0,j); 
     tiles[i][j].display(); 
    } 
} 

而對於瓷磚類的構造函數:

tile(int x, int y, int z){ 
this.x=x; 
this.y=y; 
this.z=z; 
beginShape(); 
vertex(x,y,z); 
vertex(x+1,y,z); 
vertex(x+1,y,z-1); 
vertex(x,y,z-1); 
endShape(); 
} 

沒有呈現在所有這時候運行。此外,如果這是任何問題,我的翻譯(動作)是在我爲瓦片類寫的一個方法中完成的,該類稱爲移動,它簡單地調用翻譯。這是正確的方法嗎?應該如何解決這個問題?我似乎無法理解如何渲染/創建/翻譯單個對象/形狀。

回答

0

如果您只是使用beginShape()來指定直接座標來繪製,則轉換(例如平移,旋轉等)不起作用。如果您依賴翻譯的結果將對象放入可見位置,那可能是您沒有任何結果的原因。另外,根據你如何看待你的場景,你可能會有z向着相機前進,所以你的物體正在被你吸引着看着它們,因爲它們是你獲得的2D物體, t看到任何東西,請嘗試使用x/y或y/z而不是您現在正在執行的x/z。

+0

,我將如何正確地去創造瓦的初始網格,然後提高他們根據數據點? – Zain 2010-06-02 02:07:48

+0

你能對你想要做什麼做更具體的描述嗎?如果我理解正確,你可能想要在某個點上放置一個對象,其大小基於數據。所以像... rect(x_position,y_position,width,width); 在給定寬度的x,y處放置一個矩形。 但是,我不知道您的瓷磚網格是什麼意思。 – Tyler 2010-06-02 02:36:29

0

你可以肯定地使用pushMatrix()和translate()與beginShape()等,它可能不完全是你所期望的,但它肯定會從默認原點移動的東西。

你上面的例子出了什麼問題,你正在將drawing()代碼放在構造函數中,你應該把它放在顯示函數中。

這樣:

公共無效顯示(處理PROC){ proc.beginShape() 等 }

顯示器()也需要在拉伸()循環被調用,所以初始化你的瓷磚一次,然後在draw()中顯示它們。

0

你應該遵循@泰勒關於繪製2D平面(x/y,y/z,x/z)的建議。

您的形狀可能不會呈現,因爲您可能正在繪製它們一次,並清除draw()方法中的屏幕,但我不確定,因爲我看不到剩餘的代碼。

這裏就是我的意思是:

tile[][] tiles; 
int numTiles = 51;//x and y number of tiles 

void setup() { 
    size(400,400,P3D); 
    tiles = new tile[numTiles][numTiles]; 
    for(int i=0; i<numTiles; i++) 
    for(int j=0; j<numTiles; j++) 
     tiles[i][j]=new tile(i,j,0,5); 
} 
void draw() { 
    background(255); 
    translate(width * .5,height * .5); 
    rotateY((float)mouseX/width * PI); 
    rotateX((float)mouseY/height * PI); 
    for(int i=0; i<numTiles; i++) 
    for(int j=0; j<numTiles; j++) 
     tiles[i][j].display(); 
} 
class tile { 
    int x,y,z; 
    tile(int x, int y, int z,int s) {//s for size 
    this.x=x * s; 
    this.y=y * s; 
    this.z=z * s; 
    } 
    void display(){ 
    beginShape(QUADS); 
    //XY plane 
    //* 
    vertex(x,y,z); 
    vertex(x+x,y,z); 
    vertex(x+x,y+y,z); 
    vertex(x,y+y,z); 
    //*/ 
    endShape(); 
    } 
} 

既然你只畫方格,您可以使用矩形()函數。

int numSquares = 51,squareSize = 10; 
void setup(){ 
    size(400,400,P3D); 
    smooth(); 
} 
void draw(){ 
    background(255); 
    translate(width * .5, height * .5); 
    rotateY((float)mouseX/width * PI); 
    for(int j = 0 ; j < numSquares ; j++) 
    for(int i = 0 ; i < numSquares ; i++) 
     rect(i*squareSize,j*squareSize,squareSize,squareSize); 
} 

HTH

在這種情況下