2017-01-14 6 views
0

Ich versuche einen Algorithmus zu schreiben, der ein beliebiges Quad in kleinere Quads aufteilt, die alle die gleichen x-, y- und z-Skalen haben (also Würfel). Im Moment habe ich Code, der Quads in verkleinerte Versionen von sich selbst teilt, aber ich möchte, dass das Verhältnis 1: 1: 1 ist. Wie würde ich den Code ändern, um dies zu tun?Wie würde ich einen beliebigen Würfel in kleinere Würfel unterteilen?

for (int x=0; x < 2; x++) { 
    for (int y=0; y < 2; y++) { 
     for (int z=0; z < 2; z++) { 
      GameObject newCube = Instantiate(gameObject); 
      newCube.transform.localScale = new Vector3(
       newCube.transform.localScale.x/2, 
       newCube.transform.localScale.y/2, 
       newCube.transform.localScale.z/2 
      ); 
      newCube.transform.position = new Vector3(
      newCube.transform.position.x + ((x-0.5f) * newCube.transform.localScale.x), 
      newCube.transform.position.y + ((y-0.5f) * newCube.transform.localScale.y), 
      newCube.transform.position.z + ((z-0.5f) * newCube.transform.localScale.z) 
     ); 
    } 
} 
Destroy(gameObject); 
+0

klarstellen .. beliebiges QUAD ist (sollte) ein planares Objekt mit 4 Ecken sein. Scaled Down QUAD ist nicht quadratisch oder würfelförmig. Wenn du stattdessen Würfel willst, dann sprichst du von Maschen und nicht von QUADs. Also was ist es (was genau zeigt das Eingabebeispiel)? Wie viele Quadrate/Würfel/QUADS wollen Sie in Unterteilung (basierend auf Fläche/Volumen/Größe, Konstante wie 4, andere)? Antwort ist wirklich unterschiedlich für jede Kombination von diesem. Hatte den Titel geändert, damit es besser zu deinem Code passt – Spektre

Antwort

0

Wenn ich Sie richtig verstanden habe, wollen Sie Quadrate aus einem Rechteck (eigentlich das 3D-Äquivalent von denen, aber was auch immer) machen.

Ihre inneren Quadrate müssen also höchstens die Hälfte der KLEINeren Seite des Rechtecks ​​haben. Und da sie Quadrate sind, müssen alle Seiten die gleiche Größe haben. Sie müssen also die kleinere Seite von x, y und z finden und Ihre Würfel mit allen Seiten auf die Hälfte dieses Wertes erstellen.

dass in Ihren Code umsetzen:

for (int x=0; x < 2; x++) { 
    for (int y=0; y < 2; y++) { 
     for (int z=0; z < 2; z++) { 
      GameObject newCube = Instantiate(gameObject); 
      var cubeSize = Math.Min(oldQuad.x, Math.Min(oldQuad.y, oldQuad.z))/2; 
      newCube.transform.localScale = new Vector3(
       cubeSize, 
       cubeSize, 
       cubeSize 
      ); 
      newCube.transform.position = new Vector3(
      newCube.transform.position.x + ((x-0.5f) * newCube.transform.localScale.x), 
      newCube.transform.position.y + ((y-0.5f) * newCube.transform.localScale.y), 
      newCube.transform.position.z + ((z-0.5f) * newCube.transform.localScale.z) 
     ); 
    } 
} 
Destroy(gameObject); 

Da du nichts gesagt, wie Sie wollen, dass sie positionieren, halte ich, dass ein Teil derselben.