Licht
Übersicht
1.
Das Phong-Lichmodell
2.
Die Drawing3d Klasse Light
3.
Die Drawing3d Klasse Material
4.
Beispiele
1. Das Phong-Lichtmodell
Beim Beleuchtungsmodell von Phong hat das Licht drei Farbanteile
- Ambientes Licht (Color Ambient)
- Diffuses Licht (Color Diffuse)
- GeGespiegeltes Licht (Color specular)
Diese drei Farben kommen auch beim Material vor. Zusätzlich gibt es beim Material den
Emissionanteil,
der die Ausstrahlung der Materie bewirkt. Er ist unabhänging vom Licht.
Ambientes Licht ist unabhänging vom Einfallswinkel.
Diffuses Licht
wird berechnet mit der
Formel
I = cos(θ).
Hier ist θ der Winkel zwischen einfallendem Strahl und dem Normalwinkel der Oberfläche.
Beim gespiegelten Licht kommt noch ein Exponent Shininess hinzu:
I =cosShininess(θ), wobei Shininess
eine Materialeigenschaft ist. Sie bestimmt die Rauigkeit der Oberfläche. Ein hoher Wert (~ 30)
ergibt eine spiegelnde, ein niedriger Wert eine rauhe Oberfläche.
Insgesamt entsteht das ausgehende Licht durch die
Addition aller vier Lichtarten:
Iout =
Iambient +
Idiffuse +
Ispecular +
Iemission.
Dabei sind die resultierenden Intensitäten jeweils eine Übelagerung
des Lichtanteils und der entsprechenden des Materialfarbe.
Die Positionseigenschaft des Lichtes: Sie bestimmt das Lichtzentrum
Die
Attenuationeigenschaften bestimmen die Abnahme des Lichtes.
Default ist:
ConstantAttenuation = 1,
LinearAttenuation und Quadraticattenuation = 0;
- ConstantAttenuation: Konstanter Abfall der Lichtintensität vom Lichtzentrum.
- QuadraticAttenuation: Quadratischer Abfall der Lichtintensität vom Lichtzentrum
- LinearAttenuation: Linearer Abfall der Lichtintensität vom Lichtzentrum
- SpotCutOff: Wird bei einem Spotlicht verwendet. Ein Wert von 180 schaltet das
Spotlicht aus.
Die
Spoteigenschaften werden nur bei SpotCutOff < 180
unterstützt:
- SpotExponent : Abnahme des Spotlichtes vom Zentrum des Lichtkegels nach außen
- Direction: Die Richtung des Lichtkegels.
2. Die Drawing3d Klasse Light
Eigenschaften der Klasse Light.
- Enable: Schaltet ein Licht ein oder aus
- Diffuse : Diffuses Licht
- Ambient: Ambientes Licht
- Specular: Spiegelndes Licht
- Position: Position der Lichtquelle
- Direction: Richtung des Lichtes. Diese Eigenschaft hat nur dann Bedeutung wenn der SpotCutOffwinkel kleiner als 180° ist.
- ConstantAttenuation: Die Attenuationeigenschaften bestimmen die Abnahme des
Lichtes. Default ist ConstantAttenuation = 1, LinearAttenuation und
Quadraticattenuation = 0;
- LinearAttenuation ;
- QuadraticAttenuation;
- SpotCutOff: Gibt den Winkel des Spotlights in Graden an. Bei 180° ist das
Spotlight disabled.
Hinzufügen eines Lichtes
Die Drawing3D Device enthält eine Liste
Lights, in der standardmäßig ein Licht eingefügt ist.
Es können je nach Videokarte mindestens acht Lichter erzeugt werden.
3. Die Drawing3d Klasse Material
Eigenschaften der Klasse
Material.
- Name: Dem Material kann ein String zugewiesen oder abgefragt werden
- Ambient: Ambiente Farbe
- Diffuse: Diffuse Farbe
- Specular: Spiegelungsfarbe
- Emission: Ausstrahlungsfarbe
- Shininess: Rauhigkeitsexponent
- Translucent: Durchsichtigkeit. Der Wert liegt zwischen 0 und 1.
Folgende Eigenschaften sind in Drawing 3d vordefiniert:
Brass
PolishedBronze
Bronze
Crome
Copper
PolishedCopper
Gold
PolishedGold
Pewter
Silver
PolishedSilver
Emerald
Jade
Obsidian
Pearl
Ruby
Turqoise
BlackPlastic
BlackRubber
Die Drawing3dDevice enthält eine Eigenschaft Material. Weiters gibt es sämtliche Eigenschaften von Materia
auch als Eigenschaft der Device.
4. Beispiele
Für diese Beispiele verwenden wir folgende Loadmethode:
protected override void OnCreated()
{
base.OnCreated();
BackColor= Color.Gray;
Lights[0].Position = new xyz(0, 3, 5);
}
und die Paintmethode
public override void OnPaint()
{
base.OnPaint();
PushMatrix();
MulMatrix(Matrix.Translation(-1.5, -1.5, 0));
drawSphere(new xyz(0, 0, 0), 1);
drawCone(new xyz(0, 0, 0), new xyz(1, 0, 0), 0.5, 3, 0);
drawSphere(new xyz(3, 0, 0), 1);
drawCone( new xyz(3, 0, 0), new xyz(0, 1, 0), 0.5, 3, 0);
drawSphere(new xyz(3, 3, 0), 1);
drawCone(new xyz(3, 3, 0), new xyz(-1, 0, 0), 0.5, 3, 0);
drawSphere(new xyz(0, 3, 0), 1);
drawCone(new xyz(0, 3, 0), new xyz(0, -1, 0), 0.5, 3, 0);
PopMatrix();
}
In die Paintmethode fügen wir die Zuweisungen der Farben ein, z.B.:
Ambient = Color.DarkBlue;
Diffuse = Color.Gray;
Specular = Color.White;
Emisson = Color.Black;
Je nachdem welche Farben wir setzen, erhalten wir folgende Ergebnisse:
|
|
|
|
|
Ambient = Black
Diffuse = Black
Specular = Black
Emission = Black
|
Ambient = Black
Diffuse = White
Specular = Black
Emission = Black
|
Ambient = Black
Diffuse = Black
Specular = White
Emission = Black
|
Ambient = DarkBlue
Diffuse = Black
Specular = Black
Emission = Black
|
|
|
|
| |
Ambient = DarkBlue
Diffuse = Black
Specular = White
Emission = Black
|
Ambient = DarkBlue
Diffuse = White
Specular = Gray
Emission = Black
|
Ambient = DarkBlue
Diffuse = White
Specular = White
Emission = Black
|
Ambient = DarkBlue
Diffuse = Gray
Specular = White
Emission = Red
|