D7WS HOMEPAGE WORKSHOP NEUE XTRAS GALERIE WORKSHOP Automatic Translation LESERSERVICE BUCH NEWS

Howto: Director 3D Jumpstart

 

 

 

Home
Workshop-Seite

Director 8.5 Startseite

In diesem Abschnitt:

Ring von Kugeln erzeugen

Weitere Themen:

Das Grundgerüst für einfache 3D-Behaviors
Kugel erzeugen
Box - von außen und von innen
Vectorshapes extrudieren

soon:
Kameras nutzen
Parent-Child-Relationen
SpecialFX
Darsteller speichern
3DPI als Hilfsmittel bei der Skripterstellung




 

 

 

 

Ring von Kugeln erzeugen

Da wir bisher nur ein Model in die Welt platziert haben, konnten wir auf Positionsangaben verzichten: Es wurde automatisch in die Mitte, sprich an die Position vector(0,0,0), platziert. Sollen mehrere Elemente platziert werden, so werden Position und auch Größe der einzelnen Elemente wichtig.

Der folgende Skriptausschnitt setzt Model1 und seine 11 Clones nach einfachen trigonometrischen Gesetzen auf Positionen auf einem Kreis:

-- --------------------------
-- 6a. Models clonen und positionieren
-- --------------------------
faktor = 100
s = sin(pi()/6)
c = cos(pi()/6)
mmb.model("Model1").transform.position = \
vector(c,s,0) * faktor
repeat with i = 2 to 12
  if voidP(mmb.model("Model"&i)) then 
    newmod = mmb.model("Model1").clone("Model"&i)
  end if
  case i of 
    2: pos = vector(s,c,0)
    3: pos = vector(1,0,0)
    4: pos = vector(s,-c,0)
    5: pos = vector(c,-s,0)
    6: pos = vector(0,-1,0)
    7: pos = vector(-c,-s,0)
    8: pos = vector(-s,-c,0)
    9: pos = vector(-1,0,0)
    10: pos = vector(-s,c,0)
    11: pos = vector(-c,s,0)
    12: pos = vector(0,1,0)
  end case
  mmb.model("Model"&i).transform.position = pos * faktor
  end repeat

Verändert werden nur die x- und y-Positionen. Die Nummerierung und Positionierung der Kugeln erfolgt wie beim Zifferblatt einer Uhr.




 

 

 

 

Wenn Sie das Skript im Anschluß an den bisherigen Block 5 einfügen, so bewirkt der clone()-Befehl, dass ein Duplikat des Models erstellt wird, das aber weiterhin den Shader des zuvor erzeugten Model1 nutzt. Mit dem Befehl cloneDeep() werden auch die Shader und Texturen geclont.

Um also tatsächlich ein Zifferblatt zu erzeugen, bei dem jede Kugel eine eigene Textur (die Ziffern von 1 bis 12) trägt, müßte man mit cloneDeep() arbeiten. Der entsprechende Skriptblock sieht dann so aus:

-- --------------------------
-- 5. Textur anlegen und zuweisen -- -------------------------- -- -------------------------- -- 6a. Models clonen und positionieren -- -------------------------- faktor = 100 s = sin(pi()/6) c = cos(pi()/6) repeat with i = 2 to 12 if voidP(mmb.model("Model"&i)) then newmod = mmb.model("Model1").cloneDeep("Model"&i) end if end repeat repeat with i = 1 to 12 case i of 1: pos = vector(s,c,0) 2: pos = vector(c,s,0) 3: pos = vector(1,0,0) 4: pos = vector(c,-s,0) 5: pos = vector(s,-c,0) 6: pos = vector(0,-1,0) 7: pos = vector(-s,-c,0) 8: pos = vector(-c,-s,0) 9: pos = vector(-1,0,0) 10: pos = vector(-c,s,0) 11: pos = vector(-s,c,0) 12: pos = vector(0,1,0) end case mmb.model("Model"&i).transform.position = \ pos * faktor if voidP(mmb.texture("text"&i)) then mytextu = mmb.newTexture("text"&i, \ #fromCastMember, member("text"&i)) end if mmb.model("Model"&i).shaderlist[1].texture = mytextu end repeat -- -------------------------- -- 7. Kamera einstellen -- -------------------------- mmb.camera[1].transform.position = \ vector( 0.0000, 0.0000, 400.0000 )



 

 

 

 

Hier legen wir die Textur nicht in Schritt 5 an, sondern duplizieren zunächst mit cloneDeep() das Model ohne Textur; den Clones weisen wir dann innerhalb der zweiten repeat-Schleife 12 unterschiedliche Positionen und Texturen zu. Das Ergebnis sehen Sie in der Abbildung.

Die Einstellung der Kamera auf einen größeren Abstand in z-Richtung ist eine Möglichkeit, alle Objekte in den Blick zu bekommen. Allerdings könnten wir auch von vorneherein den Abstand der Kugeln vom Zentrum des Kreises (faktor) verringern, und die Größe der Kugeln nach unseren Wünschen anpassen. Dafür verändern wir die Modelresource in Schritt 2:

-- --------------------------
-- 2. Modelresource anlegen
-- --------------------------
if voidP(mmb.modelresource("resKugel")) then
  Res = mmb.newModelResource("resKugel", #sphere)
  Res.radius = 10
end if

Statt des Standardwerts von 25 nutzen wir nun einen Radius von 10 für die Ausgangsresource (und damit auch für alle Clone-Duplikate). Weitere Einstellmöglichkeiten finden Sie im Abschnitt „Modelresources und ihre Eigenschaften.




 


Directorworkshop.de ist © Joachim Gola & Gerd Gillmaier 1998-2002. Alle Rechte vorbehalten.