VRML & Java

#VRML V2.0 utf8

#
# Festlegung von 2 Kamerapositionen, zwischen denen der Betrachter wechseln kann.
#

DEF Entry1 Viewpoint {
    position 6.0 1.6 8.0
    orientation 0.0 1.0 0.0 0.52
    description "Viewpoint1"
}

DEF Entry2 Viewpoint {
    position -4.0 1.6 6.0
    orientation 0.0 1.0 0.0 -0.52
    description "Viewpoint2"
}

#
# Über den NavigationInfo-Knoten legt man fest, wie sich der Benutzer in der
# VRML-Welt fortbewegen kann ("WALK", "FLY" .....).
# Das Headlight ist eine Lampe, die über dem Betrachter sitzt und immer in die
# Richtung scheint, in die er schaut. Ist sie ausgeschaltet, so sollten externe Lichtquellen
# vorhanden sein, da sonst die Welt nicht erleuchtet wird.
#

NavigationInfo {
    type [ "WALK", "ANY" ]
    headlight FALSE
}


#
# Erzeugen einer Lichtquelle
#


PointLight {
    ambientIntensity 0.2
    color 0.7 0.7 0.7
    location 0 5 5
}

#
# Deklaration eines roten Quaders
# Der Sensor erlaubt es, das Objekt um die Y-Achse rotieren zu lassen.
#


Transform {
translation -3 1 0
children [
    DEF RotZylin CylinderSensor { }
    DEF Quader Transform {
    children [
   
        Shape {
        appearance Appearance {
        material DEF Rot Material { diffuseColor 1 0 0 }
        }
        geometry Box { size 0.8 0.8 0.8 }    
    }
    ]
    }
]
}

#
# Deklaration eines grünenKegels
# Über den SphereSensor kann man das Objekt um jede Achse rotieren lassen.
#


Transform {
translation -1 1 0
scale 0.4 0.4 0.4
children [
    DEF RotKreis SphereSensor { }
    DEF Kegel Transform {
    children [
        Shape {
        appearance Appearance {
            material Material { diffuseColor 0 1 0 }
        }
        geometry Cone { }
        }
#
# Deklaration eines Zylinders, der über eine Eltern-Kind-Beziehung mit dem Kegel
# verbunden ist. Alle Gruppeneigenschaften des Kegels werden somit auch auf den
# Zylinder übertragen (d.h. da der Skalierungsfaktor 0.4 beträgt ist die effektive
# Position des Zylinders relativ zum Kegel 1 1 0 [translation 5*0.4 0*0.4 0*0.4].
# Außerdem eine Rotation des Kegels zu einer Rotation des Zylinders und umgekehrt.).
# Der Kegel referenziert die Materialeigenschaft des Quaders und ist somit auch rot.
#

       
        DEF Zylinder
Transform {
        translation 5 0 0
        children [
            Shape {
            appearance Appearance {
            material USE Rot
            }
            geometry Cylinder { }
        }
    ]
    }

]
}

]}

#
# Deklaration einer blauen Kugel
# Über den PlaneSensor ist es möglich, die Kugel in der X-Y-Ebene zu verschieben
#


Transform {
translation 3 1 0
scale 0.4 0.4 0.4
children [
    DEF Verschieben PlaneSensor { }
    DEF Kugel
Transform {
    children [
        Shape {
        appearance Appearance {
            material Material { diffuseColor 0 0 1 }
        }
        geometry Sphere { }
        }
    ]
    }
]
}

#
# Deklaration eines Text-Knotens
# Durch den Touch-Sensor wird ein Ereignis ausgelöst, wenn der Benutzer
# mit der Maus auf das Textobjekt clickt.
#


DEF Text Transform {
translation 5 1 0
scale 0.4 0.4 0.4
children [
    DEF Touched TouchSensor { }
    Shape {
    appearance Appearance {
        material Material { diffuseColor 1 1 1 }
    }
    geometry Text {
    string "Click me"
    fontStyle FontStyle {
    size 2.0
    style "BOLD"
    family "SERIF"
    justify "MIDDLE"
    }
    }
    }
]
}


#
#  Deklaration einer Bodenfläche, die mit einer HolzTextur belegt ist.
#


Shape {
appearance Appearance {
    material Material { ambientIntensity 0.1 }
    texture ImageTexture { url "wood0.gif" }
}
geometry IndexedFaceSet {
    coord Coordinate {
    point [
        -10 0 10,
        10 0 10,
        10 0 -10,
        -10 0 -10,
    ]
    }
    coordIndex [ 0, 1, 2, 3, -1, ]
    solid FALSE
}
}

DEF Zeit TimeSensor {
    cycleInterval 2.0
    startTime 1.0
    stopTime 0.0
    loop FALSE
}

#
# Script-Knoten (Einbinden einer Java-Klasse)
#


DEF Ballanimation Script {
    field SFFloat Hoehe 3.0
    eventIn SFFloat set_fraction
    eventOut SFVec3f value_changed
    url "bounce.class"
}

#
# Hier werden die Sensoren (Ereigniserzeuger) mit den Knoten verbunden, die auf
# die erzeugten Ereignisse (Events) reagieren sollen.
#

ROUTE Zeit.fraction_changed TO Ballanimation.set_fraction
ROUTE Ballanimation.value_changed TO Kugel.set_translation
ROUTE Touched.isActive TO Zeit.set_loop


ROUTE RotZylin.rotation_changed TO Quader.set_rotation
ROUTE RotKreis.rotation_changed TO Zylinder.set_rotation

 

Index