public class GLLichtobjekt
extends Object
Ein GLLichtobjekt
ist ein normales bGLOOP-Objekt, das leuchtet. Dies kann
im einzelnen z.B. eine Kugel
, ein Zylinder
, ein Kegel
,
ein Kegelstumpf
usw. sein. Die Klasse kann dazu verwendet werden, um
etwa Kerzenflammen oder Lampen darzustellen.
Das an den Konstruktor
übergebene
Objekt sollte nicht mehr verwendet werden, d.h. es sollten keine Methoden auf
ihm ausgeführt werden. Dies sollte nun auf dem Lichtobjekt passieren.
Beispiel:
GLLichtobjekt lobj; lobj = new GLLichtobjekt(new GLKugel(100, 200, 50, 10)); lobj.setzeFarbe(.4, .5, .2); lobj.skaliere(1.5);
In der Implementierung dieser Klasse wird für jedes Objekt eine Lichtquelle erzeugt.
Dabei ist zu beachten, dass pro Szene von OpenGL in der Regel nur 8 Lichtquellen
unterstützt werden. Werden weitere Lichter benötigt, so sollte die Methode
IGLSurface.setzeSelbstleuchten(double, double, double)
verwendet werden. Der
Nachteil eines lediglich selbstleuchtendes Objekt besteht darin, dass es keine Objekte
in seiner Umgebung beleuchten kann und die Szene ohne weitere Lichtquellen dunkel
bleibt.
Constructor and Description |
---|
GLLichtobjekt(bGLOOP.TransformableSurfaceObject pLichtobjekt)
Erstellt ein Lichtobjekt.
|
Modifier and Type | Method and Description |
---|---|
void |
drehe(double pWinkelX,
double pWinkelY,
double pWinkelZ)
Dreht Objekt um seinen Mittelpunkt.
|
void |
drehe(double pWinkelX,
double pWinkelY,
double pWinkelZ,
double pX,
double pY,
double pZ)
Dreht Objekt um die Koordinatenachsen, die in Punkt
P(pX, pY, pZ) verschoben wurden. |
void |
drehe(double pWinkel,
double pOrtX,
double pOrtY,
double pOrtZ,
double pRichtX,
double pRichtY,
double pRichtZ)
Dreht Objekt um eine angegebene Achse im Raum.
|
void |
dreheDich(double pWinkelX,
double pWinkelY,
double pWinkelZ)
Deprecated.
|
void |
dreheDich(double pWinkelX,
double pWinkelY,
double pWinkelZ,
double pX,
double pY,
double pZ)
Deprecated.
|
double[] |
gibFarbe()
Farbe des Objekts.
|
GLTextur |
gibTextur()
Gibt das aktuelle Texturobjekt zurück.
|
double |
gibX()
Gibt die x-Koordinate des Objekts zurück.
|
double |
gibY()
Gibt die y-Koordinate des Objekts zurück.
|
double |
gibZ()
Gibt die z-Koordinate des Objekts zurück.
|
void |
lichtAn(boolean an)
Aktiviert oder deaktiviert die Lichtquelle des Leuchtobjekts.
|
void |
resetSkalierungUndRotation()
Setzt Skalierungen und Drehungen zurück auf die Standardwerte.
|
void |
rotiere(double pWinkel,
double pOrtX,
double pOrtY,
double pOrtZ,
double pRichtX,
double pRichtY,
double pRichtZ)
Deprecated.
|
void |
setzeAbschwaechung(double pKonstant,
double pLinear,
double pQuadratisch)
Legt fest, wie das emittierte Licht abgeschwächt mit zunehmender
Entfernung vom Lichtobjekt abgeschwächt wird.
|
void |
setzeAmbientBeleuchtung(double pR,
double pG,
double pB)
Setzt die Farbe des Anteils des vom Lichtobjekt emittierten Streulichts.
|
void |
setzeDarstellungsModus(GLObjekt.Darstellungsmodus dm)
Setzt den
GLObjekt.Darstellungsmodus des Objekts. |
void |
setzeDurchsichtigkeit(double pAlpha)
Setzt den Durchsichtigkeitsfaktor des Objekts.
|
void |
setzeFarbe(double pR,
double pG,
double pB)
Setzt die Farbe des Objekts.
|
void |
setzeLichtFarbe(double pR,
double pG,
double pB)
Setzt den die Hauptfarbe des vom Lichtobjekt emittierten Lichts.
|
void |
setzePosition(double pX,
double pY,
double pZ)
Verschiebt das Objekts mit seinem Bezugspunkt (meistens der Mittelpunkt)
auf den Punkt
(pX, pY, pZ) . |
void |
setzeQualitaet(int pUnterteilungen)
Anzahl der polygonalen Unterteilungen des Modells.
|
void |
setzeQualitaet(int pBreitengrade,
int pLaengengrade)
Anzahl der polygonalen Unterteilungen des Modells.
|
void |
setzeSelbstleuchten(double pR,
double pG,
double pB)
Setzt die Farbwerte der Farbe, in der das Objekt "leuchtet".
|
void |
setzeSichtbarkeit(boolean pSichtbar)
Stellt ein, ob das Objekt in der Szene sichtbar ist.
|
void |
setzeTextur(GLTextur pTextur)
Legt die übergebene Textur auf das Objekt.
|
void |
setzeTextur(String pTexturBilddatei)
Legt die übergebene Textur auf das Objekt.
|
void |
skaliere(double pFaktor)
Skaliert das Objekt in alle drei Dimensionen mit dem gegebenen Faktor.
|
void |
skaliere(double pFaktorX,
double pFaktorY,
double pFaktorZ)
Verzerrt das Objekt in alle drei Dimensionen mit unterschiedlichen
Skalierungsfaktoren.
|
void |
verschiebe(double pX,
double pY,
double pZ)
Verschiebt das Objekt um den Vektor
(pX, pY, pZ) |
public GLLichtobjekt(bGLOOP.TransformableSurfaceObject pLichtobjekt)
Kugel
-,
ein Kegel
-, ein Kegelstumpf
- oder ein
Zylinder
-Objekt sein. Dieses wird dann beleuchtet. Alle
weiteren Methodenaufrufe müssen anschließend an das neu erstellte Lichtobjekt und
nicht mehr an das ursprüngliche Objekt gegeben werden — dieses
sollte nach Möglichkeit nicht mehr verwendet werden (s. GLLichtobjekt
).pLichtobjekt
- Objekt, welches beleuchtet wird.public void drehe(double pWinkelX, double pWinkelY, double pWinkelZ, double pX, double pY, double pZ)
P(pX, pY, pZ)
verschoben wurden. Dabei wird zuerst um die
y-Achse um pWinkelY
, danach um die z-Achse um
pWinkelZ
und schließlich um die y-Achse um
pWinkelY
gedreht.pWinkelX
- Winkel der Rotation um die x-Achse durch P
in GradpWinkelY
- Winkel der Rotation um die y-Achse durch P
in GradpWinkelZ
- Winkel der Rotation um die z-Achse durch P
in GradpX
- x-Koordinate von P
pY
- y-Koordinate von P
pZ
- z-Koordinate von P
public void drehe(double pWinkelX, double pWinkelY, double pWinkelZ)
M
verschobenen Koordinatenachsen rotiert. pWinkelX
- Winkel der Rotation um die x-Achse durch M
in
GradpWinkelY
- Winkel der Rotation um die y-Achse durch M
in
GradpWinkelZ
- Winkel der Rotation um die z-Achse durch M
in
Gradpublic void drehe(double pWinkel, double pOrtX, double pOrtY, double pOrtZ, double pRichtX, double pRichtY, double pRichtZ)
Die Achse wird dabei durch die Vektorgleichung
beschrieben.
Das bedeutet: Stellt man sich eine Linie ausgehend vom Ursprung (0,0,0)
zu (pRichtX, pRichtY, pRichtZ)
vor, so verläuft die zu beschreibende
Rotationsachse parallel zu dieser Strecke durch den Punkt
(pOrtX, pOrtY, pOrtZ)
. (pRichtX, pRichtY, pRichtZ)
geben daher
lediglich die Richtung der Achse an.
pWinkel
- Winkel der Rotation in GradpOrtX
- x-Koordinate des Ortsvektors pOrt
pOrtY
- y-Koordinate des Ortsvektors pOrt
pOrtZ
- z-Koordinate des Ortsvektors pOrt
pRichtX
- x-Koordinate des Richtungsvektors pRicht
pRichtY
- y-Koordinate des Richtungsvektors pRicht
pRichtZ
- z-Koordinate des Richtungsvektors pRicht
public void verschiebe(double pX, double pY, double pZ)
(pX, pY, pZ)
pX
- Objekt wird um pX
parallel zur x-Achse verschobenpY
- Objekt wird um pY
parallel zur y-Achse verschobenpZ
- Objekt wird um pZ
parallel zur z-Achse verschobenpublic void skaliere(double pFaktorX, double pFaktorY, double pFaktorZ)
pFaktorX
, in y-Richtung mit dem Faktor pFaktorY
und in z-Richtung mit dem Faktor pFaktorZ
multipliziert
werden.pFaktorX
- Skalierungsfaktor in x-RichtungpFaktorY
- Skalierungsfaktor in y-RichtungpFaktorZ
- Skalierungsfaktor in z-Richtungpublic void skaliere(double pFaktor)
pFaktor
- Skalierungsfaktor in x-,y- und z-Richtungskaliere(double, double, double)
public void setzeDarstellungsModus(GLObjekt.Darstellungsmodus dm)
GLObjekt.Darstellungsmodus
des Objekts.dm
- Darstellungsmodus (PUNKT
, LINIE
oder
GEFUELLT
)public void setzeQualitaet(int pBreitengrade, int pLaengengrade)
pBreitengrade
- Anzahl der Unteilungen horizontalen ScheibenpLaengengrade
- Anzahl der Unteilungen vertikalen Scheibenpublic void setzeQualitaet(int pUnterteilungen)
pUnterteilungen
- Anzahl der horizontalen und vertikalen
Scheiben in der UnterteilungsetzeQualitaet(int,int)
public double gibX()
public double gibY()
public double gibZ()
public void setzeFarbe(double pR, double pG, double pB)
pR
- Rotanteil, zwischen 0 und 1pG
- Grünanteil, zwischen 0 und 1pB
- Blauanteil, zwischen 0 und 1public double[] gibFarbe()
public void setzeTextur(GLTextur pTextur)
pTextur
- Ein GLTextur
-Objektpublic void setzeTextur(String pTexturBilddatei)
pTexturBilddatei
- Ein Dateiname einer Bilddatei (.jpg
oder .png)public GLTextur gibTextur()
null
zurück gegeben.GLTextur
-Objektpublic void setzeSichtbarkeit(boolean pSichtbar)
pSichtbar
- Wenn true
, so wird das Objekt
gerendert, wenn false
, dann nicht.public void lichtAn(boolean an)
an
- Wenn true
, dann wird die Lichtquelle aktiviert,
wenn false
, dann wird sie deaktiviert.public void setzeAmbientBeleuchtung(double pR, double pG, double pB)
pR
- RotanteilpG
- GrünanteilpB
- Blauanteilpublic void setzeLichtFarbe(double pR, double pG, double pB)
pR
- RotanteilpG
- GrünanteilpB
- Blauanteilpublic void setzeAbschwaechung(double pKonstant, double pLinear, double pQuadratisch)
pKonstant
- konstanter Faktor. Der Einfluss dieses Parameters ist
unabhängig von der Entfernung und gibt somit eine globale (d.h.
positionsunabhängige) Abschwächung des Lichts an.pLinear
- linearer Faktor der Abschwächung abhängig von der
Entfernung eines Pixels vom LichtobjektpQuadratisch
- quadratischer Faktor der Abschwächung abhängig vom
Quadrat der Entfernung eines Pixels vom Lichtobjekt.@Deprecated public void dreheDich(double pWinkelX, double pWinkelY, double pWinkelZ)
@Deprecated public void dreheDich(double pWinkelX, double pWinkelY, double pWinkelZ, double pX, double pY, double pZ)
@Deprecated public void rotiere(double pWinkel, double pOrtX, double pOrtY, double pOrtZ, double pRichtX, double pRichtY, double pRichtZ)
public void setzePosition(double pX, double pY, double pZ)
(pX, pY, pZ)
.pX
- x-Koordinate des ZielpunktspY
- y-Koordinate des ZielpunktspZ
- z-Koordinate des Zielpunktspublic void resetSkalierungUndRotation()
public void setzeDurchsichtigkeit(double pAlpha)
pAlpha
- Ein Wert zwischen 0 (komplett durchsichtig) und 1
(vollständig opak)public void setzeSelbstleuchten(double pR, double pG, double pB)
GLLichtobjekt
. Diese verwendet jedoch eine
Lichtquelle, von der in OpenGL in der Regel nur insgesamt 8 pro Szene zur Verfügung
stehen.pR
- Rotanteil, zwischen 0 und 1pG
- Grünanteil, zwischen 0 und 1pB
- Blauanteil, zwischen 0 und 1