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:

Box von außen
... und von innen
Variationen

Weitere Themen:

Das Grundgerüst für einfache 3D-Behaviors
Kugel erzeugen
Ring von Kugeln erzeugen
Vectorshapes extrudieren

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




 

 

 

 

Box von außen

Um bei einem Würfel oder Quader die Seitenflächen mit unterschiedlichen Texturen zu belegen, müssen sechs Shader mit sechs Texturen angelegt werden. Wir ändern das Grundgerüst aus Listing 1, indem wir die beiden Vorgänge in einer gemeinsamen repeat-Schleife erledigen.

                                                    Listing 1c
-- --------------------------
-- 2. Modelresource anlegen
-- --------------------------
if voidP(mmb.modelresource("resBox")) then
  Res = mmb.newModelResource("resBox", #box, #front)
else
  Res = mmb.modelresource("resBox")
end if
-- --------------------------
-- 3. Model anlegen
-- --------------------------
if voidP(mmb.model("Model1")) then
  mymod = mmb.newModel("Model1", Res)
else 
  mymod = mmb.model("Model1")
end if
-- --------------------------
-- 4./5 Shader und Texturen anlegen und zuweisen
-- --------------------------
textureMemberList = \
["text3","text2","text4","text5","text1","text6"]
-- Für jede der sechs Seiten einen Shader 
-- und eine Textur erzeugen
repeat with a = 1 to 6
  thisName = textureMemberList[a]
  if voidP(mmb.shader(thisname)) then
    myShad = mmb.newShader(thisName,#standard)
    myShad.ambient = rgb(255,255,255)
    myShad.diffuse = rgb(255,255,255)
    myShad.renderStyle = #fill
    myShad.specular = rgb(255,255,255)
  else
    myShad = mmb.shader(thisname)
  end if
  if voidP(mmb.texture(thisName)) then
    mytextu = mmb.newTexture(thisName,\
    #fromCastMember,member(thisName)) 
  else
    mytextu = mmb.texture(thisName)
  end if 
  myshad.texture = mytextu
  -- Shader den einzelnen Seiten des Würfels zuweisen
  mymod.shaderList[a] = myshad
end repeat 

Die shaderlist des Models enthält sodann sechs Shader, die in Position 1-4 die Seitenflächen des Würfels beschreiben, Position 5 ist die Ober-, Position 6 die Unterseite. Die Anordnung der textureMemberList (["text3", "text2", "text4", "text5", "text1", "text6"]) sorgt dafür, dass, wie bei einem Würfel üblich, gegenüberliegende Seiten stets die Summe sieben ergeben.




 

 

 

 

... und von innen

Für den Würfel in der Außenansicht wurde die Modelresource mit dem Befehl

memref.newModelResource("resBox", #box, #front)

erzeugt. Verwendet man nun statt #front den Parameter #back, so werden nur die Innenseiten gezeichnet. Die Idee, die Kamera in den Würfel zu verfrachten, liegt nahe: damit ist ein Raumeindruck ähnlich dem von QuickTimeVR zu erreichen.

Das Skript aus Listing 1c wird zunächst nur bei der Generierung der Modelresource geändert:

memref.newModelResource("resBox", #box, #back)

Probieren Sie es aus – der Effekt ist erstaunlich. Damit es wirklich wie „VR“ aussieht, verlegen wir die Kamera ins Innere des Würfels und passen das Licht an:

-- --------------------------
-- 6. Light anlegen
-- --------------------------
if voidp(mmb.light("li1")) then
  mylight = mmb.newlight("li1", #ambient)
  mylight.color = rgb( 255, 255, 255 )
  mylight.specular = 1
end if
-- --------------------------
-- 7. Kamera einstellen
-- --------------------------
mmb.camera[1].transform.position = \
vector( 0.0000, 0.0000, 0.0000 ) mmb.camera[1].fieldofView = 80.0

Damit ist der „Innenraum“ vollständig ausgeleuchtet; die Kamera steht im Ursprung der Welt, um den herum auch der Würfel aufgebaut ist. Die Angabe des fieldOfView ist nötig, um einen Weitwinkeleffekt zu erreichen.

Damit Sie den Würfel drehen können (und sich damit scheinbar im Raum orientieren), nutzen sie am Besten das Bibliotheksbehavior „Drag Model to Rotate“ mit dem Auslöser (Trigger) „Mouse left“. Die Einstellungen für letzteres sehen Sie in der Abbildung.




 

 

 

 

Variationen

Anstelle eines Ambient-Lichtes, das den gesamten Würfel ausleuchtet, wäre es auch reizvoll, ein Spot-Licht zu verwenden. Probieren Sie die unterschiedlichen Lichttypen aus! In unserem Beispiel machen wir das Spot-Licht ein Child des Würfels: wird nun der Würfel gedreht, so dreht sich das Licht mit. Das vorhandene Ambient-Licht reduzieren wir in der Helligkeit.

-- --------------------------
-- 6. Light anlegen
-- --------------------------
if voidp(mmb.light("li1")) then
  mylight = mmb.newlight("li1", #ambient)
  mylight.color = rgb( 32,32,32 )
  mylight.specular = 1
end if
if voidp(mmb.light("li2")) then
  mylight = mmb.newlight("li2", #spot)
  myLight.transform.position = \
  vector( -66.0000, -66.0000, 44.0000 )
  mylight.color = rgb( 255, 200, 200 )
  mylight.specular = 1
else 
  mylight = mmb.light("li2")
end if
mylight.parent = mymod

Wenn Sie statt #spot den Lichttyp auf #directional stellen, wird jeweils eine Seite des Würfels voll ausgeleuchtet.




 


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