Willkommen zu Realjocs Vrml2.0 Workshop Teil II:

Workshop: Teil II Oberflächeneigenschaften
In diesem Workshop wollen wir uns mit dem Aussehen und der Beschaffenheit der Objekte beschäftigen. Dazu benötigen wir den neuen Knoten "appearance Appearance" der unter "Shape" eingebunden wird. Als Feldknoten kommt noch "material Material" hinzu, mit dem wir die Möglichkeit zur explizierten Zuweisung der Oberflächeneigenschaften besitzen. Hört sich kompliziert an ist es aber gar nicht, dazu unser neues Beispiel:

#VRML V2.0 utf8

Transform {
                       translation 0 0 0
children [
               Shape {
                           appearance Appearance {
                                                                 material Material {
                                                                                           
  diffuseColor 0 0 0
                                                                                            }
                                                               }

...

diffuseColor
Mit "diffuseColor" weisen wir der Oberfläche des nachfolgenden Objektes einen RGB Wert zu, wobei 0.1 eine matte Farbe und 1 eine glänzende Farbe ergibt. Die drei Werte beschreiben von links nach rechts
Rot Grün Blau. Um glänzendes Grün zu erhalten benötigen wir z.B den RGB Wert 0 1 0.

...
          material Material {
                                          
diffuseColor 0 1 0
...

ambientIntensity
Mit dem nächsten Feldknoten "ambientIntensity" bestimmen wir die Grundhelligkeit eines Objektes unabhängig von allen Lichtquellen einer Szene, wobei 0.1 ein dunkles und der Wert 1 ein helles Objekt darstellt:

...

          material Material {
                                           diffuseColor 0 0 0.1
                                          
ambientIntensity 0.1
...

Obiges Beispiel ergibt demnach ein mattes Blaues und sehr dunkles Objekt.
shininess
Mit dem Feldknoten "shininess" bestimmen wir die Rauhheit des nachfolgenden Objektes, wobei 0.1 ein rauhes und 1 ein glattes Objekt ergibt:

...

           material Material {
                                           diffuseColor 0 1 0
                                           ambientIntensity 1
                                          
shininess 0.9
...

Obiges Beispiel ergibt also ein glänzendes Grünes, helles und glattes Objekt.
transparency
Nun kommen wir zum Feldknoten "transparency" mit dem die Transparenz eines Objekte eingestellt wird, wobei 0 ein vollständig opales und 1 ein völlig transparentes Objekt ergibt:
...

           material Material {
                                           diffuseColor 1 0 0
                                           ambientIntensity 1
                                           shininess 0.9
                                          
transparency 0.5
...

Obiges Beispiel ergibt also ein glänzendes Rotes, helles, glattes und halb transparentes Objekt.

emissiveColor
Der Feldknoten "emissiveColor", der das Leuchten eines Objektes beschreibt, muss um sich aufs Objekt auszuwirken anstelle des "diffuseColor" gesetzt werden.
...
           material Material {
                                          
emissiveColor 0 1 0
                                           ambientIntensity 1
                                           shininess 0.9
                                           transparecy 0.5
...

Der "emissiveColor" Knoten wird anstelle des "diffuseColor" gesetzt mit den Werten für RGB, dabei handelt es sich um einen obtischen Effekt. Wird eine Lichtquelle an der gleichen Position angebracht wie das zu beschreibende Objekt, (über"transform" Workshop Teil I) beleuchtet das Objekt auch andere Objekte, ohne eine zusätzliche Lichtquelle nicht. (siehe Workshop: Lichtquellen).
Der komplette Quelltext:
4 Grundkörper (Workshop Teil I) und deren Oberflächeneigenschaften:

Quelltext: "Beispiel2.wrl"

#VRML V2.0 utf8
# Wuerfel mit Zeichenstift auf Punkt 0(X) 0(Y) 0(Z) und Defaultgroesse
#Dem Objekt eine grüne glänzende Eigenschaft zuweisen
Transform {
translation 0 0 0
children [
Shape {
appearance Appearance {
material Material { diffuseColor 0 1 0
}
}
geometry Box { }
}
]
}
#Kegel mit Zeichenstiftverschiebung auf 2(X) und Defaultgroesse
#Dem Objekt eine blaue, matte, dunkle Eigenschaft zuweisen
Transform {
translation 2 0 0
children [
Shape {
appearance Appearance {
material Material { diffuseColor 0 0 0.1
ambientIntensity 0.1
}
}
geometry Cone { }
}
]
}
#Cylinder mit Zeichenstiftverschiebung auf 4(X) und Defaultgroesse
#Dem Objekt eine rote, glänzende, helle, glatte Eigenschaft zuweisen
Transform {
translation 4 0 0
children [
Shape {
appearance Appearance {
material Material { diffuseColor 1 0 0
ambientIntensity 1
shininess 1
}
}
geometry Cylinder { }
}
]
}
#Kugel mit Zeichenstiftverschiebung auf 6 (X) und Defaultgroesse
#Dem Objekt eine gelbe glänzende , helle, glatte und halb transparente Eigenschaft zuweisen
Transform {
translation 6 0 0
children [
Shape {
appearance Appearance {
material Material { diffuseColor 1 1 0
ambientIntensity 1
shininess 0.9
transparency 0.5
}
}
geometry Sphere { }
}
]
}

Vergessen Sie nicht die Datei im WRL Format zu speichern!

Dann sollte unser Quelltext als VRML Datei so aussehen: beispiel2.wrl

Aufgabe:
Experimentieren Sie ruhig mit den Werten der einzelnen Feldknoten herum und weisen Sie unseren 4 Grundkörpern jeweils unterschiedliche "Aussehen" Werte zu.

 

P.S.: Sie können Objekte auch Texturen zuweisen, das wird Bestandteil des nächsten Workshops:

        Erweiterte Oberflächeneigenschaften