• Liebe User, bitte beachtet folgendes Thema: Was im Forum passiert, bleibt im Forum! Danke!
  • Hallo Gemeinde! Das Problem leidet zurzeit unter technischen Problemen. Wir sind da dran, aber das Zeitkontingent ist begrenzt. In der Zwischenzeit dürfte den meisten aufgefallen sein, dass das Erstellen von Posts funktioniert, auch wenn das Forum erstmal eine Fehlermeldung wirft. Um unseren Löschaufwand zu minimieren, bitten wir euch darum, nicht mehrmals auf 'Post Reply' zu klicken, da das zur Mehrfachposts führt. Grußworte.

VRML: Route so setzen, dass sie für jeden PROTO gilt

Mitglied seit
08.03.2004
Beiträge
1.574
Reaktionen
0
hi Leutz
folgende Sache hab ich gerade gecoded:

Code:
PROTO Lampe []{
  DEF LampeMesh Transfrom {
     translation <a> <b> <c>
     ...
  }
  DEF LampeSpotlights Transform {
     translation <d> <e> <f>
  }
}

in <> stehen jeweils komplizierte Zahlenkombinationen drin, die das Mesh der Lampe mit der Ausleuchtung der Lampe in die entsprechende Proportionen setzt.

Ich möchte erreichen, dass ich komplette Lampe-Nodes verschieben kann ohne mir noch später um den Inhalt gedanken machen zu müssen (OOP Style halt).
Deshalb habe ich ein exposedField, ein Pärchen Scripts und ein paar ROUTES angelegt. Aber nun Frage ich mich wie ich das alles verbinden kann. Siehe folgendes Listing:
Code:
PROTO Lampe [
  exposedField Position 0 0 0
]{
  DEF LampeMesh Transfrom {
     translation <a> <b> <c>
     ...
  }
  DEF LampeSpotlights Transform {
     translation <d> <e> <f>
  }
  DEF FunktionMesh Script {
     url "Translatemapping.js"
     eventIn TransIn
     eventOut TransOut
  }
  DEF FunktionLights Script {
     url "TranslateLightMapping.js"
     eventIn TransIn
     eventOut TransOut
  }
  ROUTE <???>.Position TO FunktionMesh.TransIn
  ROUTE <???>.Position TO FunktionLights.TransIn
  ROUTE FunktionMesh.TransOut TO LampeMesh.translation
  ROUTE FunktionLights.TransOut TO LampeSpotlights.translation 
}

Wie ersetze ich nun <???>? Einfach durch Lampe geht nicht. Zumindest meckern mir die Parser immer rum (dune und Octaga Player), dass sie den Knoten Lampe nicht kennen. Die Routes rausnehmen möchte ich auch nicht, dann muss ich ja zu jedem Objekt später ein Route schreiben. Das wäre unangenehm...
Gibt es dafür eine sinnvolle Lösung oder muss man sich da was zurecht hacken?
Kann ich an meiner Gesamtplanung etwas ändern, dass eine einfache, ordentliche Lösung realisierbar wird?

Danke im Voraus!
 
Mitglied seit
08.03.2004
Beiträge
1.574
Reaktionen
0
oh man, unter Sonnenlicht wirkt das Problem kindisch einfach zu lösen.

Bisher hab ich die Struktur so gehabt:

Code:
PROTO
|-LampeMesh Transform
|-LampeSpotlights Transform

wenn man die Struktur wie folgt anpasst...

Code:
PROTO
|-LampeAlles Transform
  |-LampeMesh Transform
  |-LampeSpotlights Transform
... ist die Lösung Pillepalle weil man einfach nur die Eigenschaften von LampeAlles auf die Felder der PROTO Schnittstelle setzen muss. Die Kindknoten positionieren sich immer Relativ zum internen Koordinatensystem des Vaterknotens. Daher müssen diese nicht modifiziert werden.

Das Ergebnis sieht dann so aus:
Code:
PROTO Lampe [
  exposedField Position 0 0 0
]{
  DEF LampeAlles Transform {
    translation IS Position
    children [
      DEF LampeMesh Transfrom {
         translation <a> <b> <c>
         ...
      }
      DEF LampeSpotlights Transform {
         translation <d> <e> <f>
         ...
      }
    ]
  }
 
Oben