Форма объекта в Обработка, перевод отдельных фигур - PullRequest
1 голос
/ 02 июня 2010

Я сталкиваюсь с трудностями с функцией 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();
}

Ничего не отображается вообще, когда это работает. Кроме того, если это имеет какое-либо значение, мои переводы (движения) выполняются в методе, который я написал для класса плиток, который называется move, который просто вызывает translate. Это правильный путь? Как подойти к этому? Кажется, я совсем не понимаю, как визуализировать / создавать / переводить отдельные объекты / фигуры.

Ответы [ 3 ]

0 голосов
/ 14 июня 2010

Вы определенно можете использовать pushMatrix () и translate () с beginShape () и т. Д., Это может быть не совсем то, что вы ожидаете, но это определенно переместит вещи из исходного положения по умолчанию.

Что не так с вашим примером выше, так это то, что вы помещаете код Drawing () в конструктор, где вы должны поместить его в функцию отображения.

так:

публичное отображение пустоты (процесс обработки) { proc.beginShape () и т.п. }

display () также необходимо вызывать в цикле draw (), поэтому инициализируйте ваши плитки один раз, а затем отобразите их в draw ().

0 голосов
/ 17 марта 2011

Вы должны следовать советам @ 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);
}

НТН

0 голосов
/ 02 июня 2010

Преобразования (такие как перевод, вращение и т. Д.) Не работают, если вы используете beginShape () , поскольку вы просто указываете прямые координаты для рисования. Если вы полагаетесь на результат перевода, чтобы поместить объект в видимое место, возможно, по этой причине у вас нет результатов.

Кроме того, в зависимости от того, как вы смотрите на свою сцену, вы, вероятно, приближаете z к камере, поэтому ваши объекты рисуются, а вы смотрите на них сбоку, и, поскольку они являются 2d объектами, вы не посмотрите что-нибудь, попробуйте использовать x / y или y / z вместо x / z, что вы делаете сейчас.

...