我遇到了对象的translate()函数以及Processing中的一般对象的困难。我仔细研究了这些例子并试图复制他们实例化对象的方式,但似乎无法让形状出现在屏幕上并且不会移动它们。我使用嵌套的for循环将对象实例化为数组,并期望渲染对象的网格。但是,什么都没有呈现。
我的嵌套for循环结构实例化tile:
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类的构造函数:
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();
}
运行时根本没有渲染。此外,如果这是任何问题,我的翻译(动作)是在我为tile类写的一个方法中完成的,这个方法叫做move,它只是调用translate。这是正确的方法吗?怎么应该接近这个?我似乎无法理解如何渲染/创建/翻译单个对象/形状。
答案 0 :(得分:0)
如果您使用beginShape()进行转换(例如翻译,旋转等),则只需指定要绘制的直接坐标即可。如果您依靠翻译的结果将对象放入可见位置,这可能就是您没有任何结果的原因。
另外,根据你对场景的看法,你可能有z朝向相机,因此你的对象正在你看着它们被绘制,因为它们是2d物体你不会看到任何东西,尝试使用x / y或y / z代替你现在正在做的x / z。
答案 1 :(得分:0)
你绝对可以使用pushMatrix()和translate()与beginShape()等等,它可能不完全符合你的期望,但它肯定会从默认的原点移动它。
上面的例子出了什么问题,你将把drawing()代码放在构造函数中,你应该把它放在显示函数中。
这样:
public void display(Processing proc){ proc.beginShape() 等等 }
display()也需要在draw()循环中调用,所以初始化一次tile,然后在draw()中显示它们。
答案 2 :(得分:0)
您应该遵循@ Tyler的建议,在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();
}
}
由于你只是绘制正方形,你可以使用rect()函数。
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