2010-06-02 5 views
1

Я столкнулся с трудностью с помощью функции translate() для объектов, а также объектов вообще в обработке. Я просмотрел примеры и попытался воспроизвести манеры, с помощью которых они создавали объекты, но, похоже, даже не могут отображать фигуры на экране, а не перемещать их. Я создаю объекты в массиве с помощью вложенного цикла и ожидаю, что сетка объектов будет визуализирована. Однако ничего не получается.Объект формы в обработке, перевод отдельных фигур

Мои вложенные для структуры петли для создания экземпляра плитки:

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, который просто вызывает перевод. Правильно ли это? Как подойти к этому? Я вообще не понимаю, как визуализировать/создавать/переводить отдельные объекты/фигуры.

ответ

0

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

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

+0

в этом случае, как бы я правильно идти о создании начальной сетки плитки, а затем поднимать их в соответствии с пунктами данных? – Zain

+0

Не могли бы вы быть более конкретными с тем, что вы пытаетесь сделать? Если я получу это правильно, вы, вероятно, захотите разместить объект в точке с размером, основанным на данных. Так что-то вроде .. rect (x_position, y_position, width, width); размещение прямоугольника в точке x, y с заданной шириной. Но опять же, я не уверен, что вы подразумеваете под решеткой плитки. – Tyler

0

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

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

так:

общественная недействительный дисплей (Обработка 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); 
} 

НТН