1

オブジェクトの translate() 関数だけでなく、Processing のオブジェクト全般で問題に直面しています。私は例を見て、オブジェクトをインスタンス化する方法を再現しようとしましたが、形状を画面に表示することさえできないようで、それらを動かすことさえできません. ネストされた 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(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 と呼ばれるタイル クラス用に作成したメソッドで行われます。これは正しい方法ですか?これにどのようにアプローチする必要がありますか?個々のオブジェクト/シェイプをレンダリング/作成/変換する方法がまったく理解できないようです。

4

3 に答える 3

0

2D平面(x / y、y / z、x / z)での描画については、@Tylerのアドバイスに従う必要があります。

図形を一度描画し、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

于 2011-03-17T11:32:36.027 に答える
0

間違いなくpushMatrix()とtranslate()をbeginShape()などで使用できます。これは完全に期待どおりではないかもしれませんが、デフォルトの原点から確実に移動します。

上記の例の何が問題になっているのかというと、drawing()コードをコンストラクターに入れて、display関数に入れる必要があるということです。

それで:

public void display(Processing proc){proc.beginShape()など}

display()もdraw()ループで呼び出す必要があるため、タイルを一度初期化してから、draw()で表示します。

于 2010-06-14T13:46:49.690 に答える
0

beginShape()を使用すると、描画先の座標を直接指定するだけなので、変換 (移動、回転など) は機能しません。オブジェクトを可視位置に配置するために変換の結果に依存している場合は、結果が得られない可能性があります。

また、シーンの見方によっては、z がカメラに向かってくる可能性が高いため、オブジェクトは横から見た状態で描画されます。これらは 2D オブジェクトであるため、何も見えません。現在行っている x/z の代わりに x/y または y/z を使用してみてください。

于 2010-06-02T01:11:36.207 に答える