2010-06-02 4 views
1

Je suis confronté à des difficultés avec la fonction translate() pour les objets ainsi que les objets en général dans le traitement. J'ai parcouru les exemples et j'ai essayé de reproduire les manières par lesquelles ils ont instancié les objets mais n'arrive même pas à faire apparaître les formes sur l'écran et à les déplacer. J'instancie les objets dans un tableau en utilisant une boucle for imbriquée et attend une grille des objets à rendre. Cependant, rien du tout n'est rendu.Forme l'objet dans le traitement, traduire des formes individuelles

Ma emboîtés pour la structure de boucle pour instancier les tuiles:

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(); 
    } 
} 

Et les constructeurs pour la classe de tuiles:

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(); 
} 

Rien est rendu du tout quand cela fonctionne. De plus, si cela vous préoccupe, mes traductions (mouvements) sont faites dans une méthode que j'ai écrite pour la classe de tuiles appelée move qui appelle simplement translate. C'est la bonne route? Comment devrait-on aborder cela? Je n'arrive pas à comprendre du tout comment rendre/créer/traduire des objets/formes individuels.

Répondre

0

Les transformations (telles que la translation, la rotation, etc.) ne fonctionnent pas si vous utilisez beginShape() car vous spécifiez simplement les coordonnées directes à dessiner. Si vous comptez sur le résultat d'une traduction pour placer un objet dans un emplacement visible, cela pourrait expliquer pourquoi vous n'obtenez aucun résultat. En outre, en fonction de la façon dont vous regardez votre scène, vous avez probablement z en direction de la caméra, ainsi vos objets sont dessinés avec vous en les regardant sur le côté, et comme ce sont des objets 2D que vous avez gagnés. Pour voir quoi que ce soit, essayez d'utiliser x/y ou y/z au lieu de x/z que vous êtes en train de faire.

+0

dans ce cas, comment pourrais-je aller correctement sur la création d'une grille initiale de tuiles puis les élever selon les points de données? – Zain

+0

Pourriez-vous être un peu plus précis avec ce que vous essayez de faire? Si je comprends bien, vous voudrez probablement placer un objet à un point, avec une taille basée sur les données. Donc quelque chose comme .. rect (x_position, y_position, largeur, largeur); en plaçant un rectangle en x, y avec une largeur donnée. Mais encore une fois, je ne suis pas sûr de ce que vous voulez dire par une grille de tuiles. – Tyler

0

Vous pouvez certainement utiliser pushMatrix() et translate() avec beginShape() et autres, ce n'est peut-être pas tout à fait ce que vous attendez, mais il va certainement déplacer les choses de l'origine par défaut.

Ce qui ne va pas avec votre exemple ci-dessus est que vous mettez le code drawing() dans le constructeur où vous devriez le mettre dans la fonction d'affichage.

donc:

affichage public void (traitement proc) { proc.beginShape() etc. }

affichage() doit également être appelé dans la boucle draw(), donc initialize vos tuiles une fois et ensuite les afficher dans draw().

0

Vous devez suivre le conseil de @ Tyler sur le dessin dans un plan 2D (x/y, y/z, x/z). Vos formes ne seront probablement pas rendues parce que vous pourriez les dessiner une fois, et effacer l'écran dans la méthode draw(), mais je ne suis pas sûr car je ne peux pas voir le reste de votre code.

Voici ce que je veux dire:

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(); 
    } 
} 

Puisque vous dessinez seulement carrés, vous pouvez utiliser la fonction 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

Questions connexes