2010-06-02 43 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

在这种情况下