处理中的形状对象,转换单个形状

时间:2010-06-02 01:04:53

标签: opengl 3d processing

我遇到了对象的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。这是正确的方法吗?怎么应该接近这个?我似乎无法理解如何渲染/创建/翻译单个对象/形状。

3 个答案:

答案 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