Exkurs - X3D

Blickpunkt

<Viewpoint position="0 5 5" orientation='1 0 0 -0.79'/> 

Mit diesem Tag setzt man den Punkt, auf dem der Betrachter steht und die Richtung, in die er blickt. Der ursprüngliche Blickpunkt befindet sich auf (0,0,10) und der Betrachter schaut entlang der Z-Achse. In diesem Beispiel setzen wir den Betrachter auf (0,5,5), also näher und erhöhter als gewöhnlich. Damit er ein Objekt im Ursprung sehen kann, lassen wir ihn von oben schräg nach unten schauen, wofür wir den Blick um die X-Achse (1,0,0) um negative 45° (-0.79 Radians) rotieren.

Wir können hier auch mehrere Blickpunkte definieren:

<Viewpoint position="0 5 5" orientation='1 0 0 -0.79'/> 

<Viewpoint position="0 -5 5" orientation='1 0 0 0.79'/> 

<Shape>
    <Box size='1 2 3'/>
    <Appearance>
        <Material diffuseColor="1 0 0"/>
    </Appearance>
</Shape>

Nur der erste Blickpunkt wird hier als Standard genommen. Es werden jedoch alle Blickpunkte gespeichert, sodass man zwischen ihnen wechseln kann:

Mauszeiger über Jump to next viewpoint

Die Pfeile unten wechseln nun zwischen den Blickpunkten hin und her.

Zusatzwissen: Wenn ein Viewpoint angesteuert wird, bewegt sich die Kamera normalerweise linear auf den neuen Punkt. Mit

<NavigationInfo transitionType="TELEPORT"/>

lässt sich das auf einen sofortigen Positionswechsel setzen. Mit ANIMATE als Argument zieht die Kamera eine schwungvolle Bahn.

Beleuchtung

X3D wird normalerweise so dargestellt, dass die Lichtquelle mitwandert. Mit

<DirectionalLight/> 

lässt sich das ändern:

Von rechts beleuchtete Kugel

Diese Änderung gilt nur für Objekte in der gleichen Gruppe (siehe das entsprechende Kapitel) wie dieser Tag. Mit <DirectionalLight color='1 0 0' direction='0 0 1'/> lässt sich die Farbe dieses Lichtes mittels dem Argument color auf rot setzen (1 0 0) statt dem Standardweiß (1 1 1) und mittels dem Argument direction die Richtung ändern, in welche das Licht strahlt (Standard ist (0,0,-1)).

Achtung: Die Farbe zu verändern kann dafür sorgen, dass die Lichtquelle unsichtbar wird falls diese Farbe nichts mit der Farbe der Objekte gemeinsam hat - rote Flächen können blaues Licht nicht reflektieren und ignorieren es daher.

Eine andere Möglichkeit ist eine punktförmige Lichtquelle:

Vier Kugeln um einen Punkt, der sie beleuchtet

<PointLight />

Hier befindet sich die Lichtquelle auf einem Punkt, nämlich im Ursprung (die Kugeln haben einen Radius von 1 und sind jeweils 2 Einheiten vom Ursprung entfernt). Ein Beispiel für weitere Argumente wäre:

<PointLight color='0 0 1' attentuation='1 1 0' location='1 1 1'/>

Wieder setzen wir mit color die Farbe (Weiß ist Standard). Location verändert die Position der Lichtquelle (Standard ist der Ursprung).

Attentuation ist ein etwas komplexeres Argument. Im Prinzip wird hier angegeben, wie schnell die Lichtquelle mit der Entfernung zu ihr schwächer wird. Die erste Zahl gibt an, wie stark das Licht unabhängig von der Entfernung ist, die zweite Zahl gibt eine Stärke an, die linear mit der Entfernung schwächer wird (also auf doppelte Entfernung nur halb so stark ist) und die dritte ist eine Stärke, die quadratisch mit der Entfernung abnimmt (das kann sehr schnell gehen). Der Standard ist hier (1 0 0), d.h. normalerweise nimmt die Stärke einer Lichtquelle nicht ab.

Generell werfen andere Objekte hier keinen Schatten, es kann sogar ein Objekt um die Lichtquelle herum positioniert sein ohne sie zu schlucken:

Sechs Kugeln welche blaues Licht ohne Schatten demonstrieren

In dieser Graphik liegt die Lichtquelle im Ursprung und strahlt blaues Licht auf weiße Kugeln.

Da das PointLight selbst unsichtbar ist, kann man diesen Effekt nutzen um eine Laterne oder Sonne damit zu realisieren. Wenn du das vorhast, löse vorher eventuell Aufgabe 5a.

X

Fehler melden

X

Suche