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

Opengl 处理中的形状对象,转换单个形状,opengl,3d,processing,Opengl,3d,Processing,我在处理对象以及一般对象时遇到了使用translate()函数的困难。我浏览了这些示例,并试图复制它们实例化对象的方式,但似乎甚至无法让形状显示在屏幕上,更不用说移动它们了。我使用嵌套的for循环将对象实例化为一个数组,并期望呈现一个对象网格。但是,根本不渲染任何内容 我的嵌套for循环结构用于实例化平铺: for(int i=0; i<102; i++){ for(int j=0; j<102; j++){ tiles[i][j]=new tile(i,0,j);

我在处理对象以及一般对象时遇到了使用translate()函数的困难。我浏览了这些示例,并试图复制它们实例化对象的方式,但似乎甚至无法让形状显示在屏幕上,更不用说移动它们了。我使用嵌套的for循环将对象实例化为一个数组,并期望呈现一个对象网格。但是,根本不渲染任何内容

我的嵌套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类编写的一个方法中完成的,该类名为move,它只调用translate。这是正确的方法吗?我们应该如何处理这个问题?我似乎根本不明白如何渲染/创建/转换单个对象/形状。

如果使用as,则转换(例如平移、旋转等)不起作用,因为您只是指定要绘制的直接坐标。如果您依靠平移的结果将对象放置到可见位置,这可能就是您没有任何结果的原因


此外,根据您观察场景的方式,您可能会看到z向摄影机方向移动,因此您在绘制对象时会看到它们的侧面,因为它们是2d对象,您不会看到任何东西,请尝试使用x/y或y/z,而不是您现在正在做的x/z。

您肯定可以使用pushMatrix()和translate()使用beginShape()等等,它可能不是您所期望的那样,但是它肯定会从默认原点移动对象

上面的示例的错误在于,您将drawing()代码放在构造函数中,应该将其放在display函数中

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);
}
因此:

公共作废显示(处理过程){ 程序beginShape() 等 }


display()也需要在draw()循环中被调用,因此初始化您的平铺一次,然后在draw()中显示它们。

您应该遵循@Tyler关于在二维平面(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();
  }
}
tile[][]瓷砖;
int numTiles=51;//x和y瓷砖数量
无效设置(){
尺寸(400400,P3D);
瓷砖=新瓷砖[numTiles][numTiles];

对于(inti=0;ii)在这种情况下,我应该如何正确地创建一个初始的分片网格,然后根据数据点提升它们?你能不能更具体一点你想做什么?如果我做对了,你可能会想在一个点上放置一个对象,大小基于数据。比如..rect(x_位置,y_位置,宽度,宽度);在x,y放置一个给定宽度的矩形。但是,我不确定你所说的瓷砖网格是什么意思。
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);
}