WaBis

walter.bislins.ch

JSG3D: JsgScene

Das Scene Objekt speichert Beleuchtungsdaten wie AmbientLight, CamLight und LightSourceList. Diese Daten werden beim Zeichnen von 3D-Flächen benötigt. Scene ist ein Property der JsGraph3D Klasse. Das Scene Objekt wird beim Erzeugen des JsGraph3D Objektes angelegt.

JsgScene Klasse

JsgScene = {
AmbientLight: JsgColor; ReadOnly; Init = JsgColor.White() → SetAmbientLight()
CamLight: JsgColor; ReadOnly; Init = JsgColor.White() → SetCamLight()
LightSourceList: Array of JsgLightSource; ReadOnly; Init = [ ] → AddLightSource()
}

Die JsGraph3D.Scene kann mit der Funktion NewScene() durch eine neue Scene ersetzt werden. Der Konstruktor der JsgScene Klasse ist eine private Funktion, welche von NewScene() gerufen wird.

JsgScene Properties

AmbientLight Farbe und Helligkeit des Umgebungs-Lichtes
CamLight Farbe und Helligkeit des Kamera-Lichtes
LightSourceList Liste mit Lichtquellen

Die JsgScene Properties dürfen nur gelesen werden. Verwende die JsgScene Funktionen, um die Scene-Einstellungen zu ändern.

JsgScene Funktionen

NewScene() Erzeugt ein neues JsGraph3D.Scene Objekt
SaveScene() Speichert eine JsgScene in einem Objekt
SetScene() Lädt eine JsgScene aus einem Objekt
SaveLight() Speichert die Lichtquellen der JsGraph3D.Scene in einem Objekt
SetLight() Kann zum Ersetzen der LightSourceList der JsGraph3D.Scene durch einen Array von JsgLightSource Objekten verwendet werden.
SetAmbientLight() Setzt das Umgebungs-Licht einer JsgScene
SetCamLight() Setzt das Kamera-Licht einer JsgScene
AddLightSource() Erzeugt eine neue Lichtquelle für die JsgScene

JsgScene.AmbientLight

JsgScene.AmbientLight: JsgColor; ReadOnly; Init = JsgColor.White();SetAmbientLight()

Farbe und Helligkeit des Umgebungs-Lichtes. Die effektive Farbe und Helligkeit hängt auch vom Property AreaColor und AmbiRefl einer Fläche ab.

JsgScene.CamLight

JsgScene.CamLight: JsgColor; ReadOnly; Init = JsgColor.White();SetCamLight()

Farbe und Helligkeit des Kamera-Lichtes. Die effektive Farbe und Helligkeit hängt auch vom Property AreaColor und CamRefl einer Fläche ab.

JsgScene.LightSourceList

JsgScene.LightSourceList: Array of JsgLightSource; ReadOnly; Init = [ ];AddLightSource()

Liste mit Lichtquellen, welche die Scene beleuchten.

JsGraph3D.NewScene()

JsGraph3D.NewScene( AmbientLight, CamLight )

AmbientLight: JsgColor; Optional; Default = JsgColor.White()
CamLight: JsgColor; Optional; Default = JsgColor.White()

Erzeugt eine neue JsGraph3D.Scene und ersetzt damit eine bestehende Scene. Mit der gelöschten Scene werden auch alle Lichtquellen gelöscht.

JsGraph3D.SaveScene()

JsGraph3D.SaveScene( Params )

Params: Object; Optional; Default = undefined
Falls definiert, wird die JsGraph3D.Scene in diesem Objekt gespeichert. Sonst wird die Scene in einem neuen Objekt gespeichert, welches als Retrunwert zurückgegeben wird.
Return: JsgSceneDef or Params

Speichert die JsGraph3D.Scene im Property Object.Scene. Wenn Params definiert ist, wird die Scene in diesem Objekt abgespeichert. Wenn Params undefiniert ist, wird ein neues Objekt vom Typ JsgSceneDef zum Speichern der Scene erzeugt. Das neue Objekt oder Params wird als Returnwert zurückgegeben.

Mit der Funktion SetScene() kann die gespeicherte Scene wieder im JsGraph3D.Scene Property installiert werden.

Hinweis: Im Objekt Params können auch andere Parameter definiert sein, welche nicht zu einer JsgScene gehören. So können im selben Objekt Properties verschiedener Objekte gespeichert werden. Dasselbe Objekt kann dann an mehere Funktionen übergeben werden, wobei jede Funktion ihre Parameter ausliesst und die anderen ignoriert.

JsGraph3D.SetScene()

JsGraph3D.SetScene( Params )

Params: JsgSceneDef; Optional; Default = undefined

Übernimmt eine ganze JsgScene und ersetzt damit die JsGraph3D.Scene oder ersetzt die Beleuchtung der Scene wie in den Parametern angegeben.

JsgSceneDef

JsgSceneDef = {
Scene: JsgScene; Optional
Eine mit SaveScene() gespeicherte Scene
AmbientLight: JsgColor; Optional
Farbe und Helligkeit des Umgebungslichtes → SetAmbientLight()
CamLight: JsgColor; Optional
Farbe und Helligkeit des Kamera-Lichtes → SetCamLight()
LightSourceList: Array of JsgLightSource; Optional
Liste von Lichtquellen → AddLightSource()
}

Wenn der Parameter Scene definiert ist, wird das Property JsGraph3D.Scene durch diese Scene ersetzt. Wenn Scene nicht definiert ist, wird die Funktion SetLight() mit Params aufgerufen, welche die anderen drei Parameter verarbeitet. Diese werden in die bestehende JsGraph3D.Scene übernommen.

Hinweis: Die Funktion SaveScene() speichert die ganze JsGraph3D.Scene im Objekt, nicht die einzelnen Komponenten.

JsGraph3D.SaveLight()

JsGraph3D.SaveLight( Params )

Params: Object; Optional; Default = undefined
Falls definiert, werden die Lichtquellen der JsGraph3D.Scene in diesem Objekt gespeichert. Sonst werden die Lichtquellen in einem neuen Objekt gespeichert, welches als Retrunwert zurückgegeben wird.
Return: Object or Params

Speichert die Lichtquellen AmbientLight, CamLight und LightSourceList der JsGraph3D.Scene in einem Objekt. Wenn Params ein Objekt ist, werden die Lichtquellen in diesem Objekt abgespeichert. Wenn Params undefined ist, wird ein neues Objekt zum Speichern der Lichtquellen erzeugt. Params oder dieses Objekt wird als Returnwert zurückgegeben.

Mit der Funktion SetLight() können die gespeicherten Lichtquellen wieder in der JsGraph3D.Scene installiert werden.

JsGraph3D.SetLight()

JsGraph3D.SetLight( Params )

Params: JsgSceneLightDef; Optional; Default = undefined

Setzt die Beleuchtung-Parameter des JsGraph3D.Scene Objektes. Für Parameter, welche nicht angegeben werden, behalten die entsprechenden JsgScene Properties ihren alten Wert.

JsgSceneLightDef

JsgSceneLightDef = {
AmbientLight: JsgColor; Optional
Farbe und Helligkeit des Umgebungslichtes → SetAmbientLight()
CamLight: JsgColor; Optional
Farbe und Helligkeit des Kamera-Lichtes → SetCamLight()
LightSourceList: Array of JsgLightSource or Array of JsgLightSourceDef; Optional
Liste von Lichtquellen → AddLightSource()
}

Wird LightSourceList angegeben, werden alle vorhandenen Lichtquellen gelöscht und durch die in LightSourceList definierten Lichtquellen ersetzt. Alle Lichtquellen können gelöscht werden, indem LightSourceList = [ ] gesetzt wird.

Beispiel: Erzeugen von zwei Lichquellen

g3d.SetLight( {
  AmbientLight: JsgColor.RGB( 0, 0, 1 ),
  CamLight: JsgColor.RGB( 1, 1, 0.9 ),
  LightSourceList: 
  [
    {
      LightColor: JsgColor.White(),
      LightDir: JsgVect3.New( 0, 0, 1 )
    },
    {
      LightColor: JsgColor.RGB( 1, 0, 0 ),
      LightPos: JsgVect3.New( -100, 0, 100 )
    }
  ]
} );

Für weitere Parameter von LightSourceList und weitere Beispiele siehe AddLightSource().

JsGraph3D.SetAmbientLight()

JsGraph3D.SetAmbientLight( LightColor )

LightColor: JsgColor; Optional; Default = JsgColor.White()

Farbe und Helligkeit des Umgebungs-Lichtes. Die effektive Farbe und Helligkeit der Fläche hängt auch vom Property AreaColor und AmbiRefl einer Fläche ab.

JsGraph3D.SetCamLight()

JsGraph3D.SetCamLight( LightColor )

LightColor: JsgColor; Optional; Default = JsgColor.White()

Farbe und Helligkeit des Kamera-Lichtes. Die effektive Farbe und Helligkeit der Fläche hängt auch vom Property AreaColor und CamRefl einer Fläche ab.

JsGraph3D.AddLightSource()

JsGraph3D.AddLightSource( Params )

Params: JsgLightSourceDef or JsgLightSource; Optional; Default = undefined
Return: JsgLightSource

Erzeugt eine punktförmige oder eine unendlich entfernte grossflächige Lichtquelle und speichert sie in der LightSourceList der JsGraph3D.Scene. Eine Refernz auf die erzeugte Lichtquelle wird als Returnwert zurückgegeben.

Wenn Params ein JsgLightSource Objekt ist, wird eine Kopie davon in der LightSourceList gespeichert.

JsgLightSourceDef

JsgLightSourceDef = {
LightColor: JsgColor; Optional; Default = JsgColor.White()
Farbe der Lichtquelle.
DiffInt: Number(>=0); Optional; Default = 1
Diffuse Intensity: Stärke des diffusen Lichtanteils (0-1). Es sind auch Werte über 1 erlaubt, wenn dieser Anteil extrem stark sein soll.
SpecInt: Number(>=0); Optional; Default = 1
Specular Intensity: Stärke des spiegelnden Lichtanteils (0-1). Es sind auch Werte über 1 erlaubt.
LightDir: JsgVect3; Optional; Default = JsgVect3.New(0,0,1)
Vektor zu einer unendlich weit entfernten Lichtquelle. Es kann nur entweder LightDir oder LightPos verwendet werden! Die Länge des Vektors muss nicht 1 sein, wird aber im Property LightDir mit Länge 1 gespeichert.
LightPos: JsgVect3; Optional; Default = null
Position einer punktförmigen Lichtquelle. Es kann nur entweder LightDir oder LightPos verwendet werden!
HAng: Number; Optional; Default = 0
Horizontaler Winkel zur Lichtquelle. Gemessen in der XY-Ebene von der X-Achse zur Y-Achse in Grad.
VAng: Number; Optional; Default = 0
Vertikaler Winkel zur Lichtquelle. Gemessen von der XY-Ebene zur Z-Achse in Grad.
Dist: Number(>0); Optional; Default = 100
Distanz zur Lichtquelle.
RefPoint: JsgVect3; Optional; Default = JsgVect3.Null()
Referenzpunkt, von dem aus die Position der Lichtquelle über die Winkel HAng und VAng, sowie der Abstand Dist berechnet wird. Wird RefPoint angegeben, so wird eine punktförmige Lichtquelle erzeugt. Wird RefPoint nicht angegeben, so wird eine unendlich weit entfernte Lichtquelle erzeugt (parallele Lichtstrahlen).
}

Es müssen nur jene Properties definiert werden, welche von den Defaultwerten abweichen.

Die ersten 5 Properties entsprechen den JsgLightSource Properties. Wenn einer der anderen 4 Properties definiert ist, wird LightDir bzw. LightPos aus diesen 4 Werten berechnet. Für nicht definierte Properties wird jeweils der Defaultwert verwendet.

Hinweis: Von den Farben wird keine Kopie erstellt, sondern es werden die Referenzen auf die Farben in Params im JsgLightSource Objekt gespeichert. Änderungen an diesen Farben wirken sich daher auf die Lichtquelle aus. Ist dies nicht erwünscht, kann in Params mit der Funktion JsgColor.Copy() eine Kopie des Farb-Objektes übergeben werden.

Code-Beispiele

Ein Beispiel wie die Funktion AddLightSource() verwendet werden kann, um einzelne Lichtquellen zu erzeugen:

g3d.AddLightSource( { 
  LightColor: JsgColor.RGB(1,0,0),
  LightDir: JsgVect3.New( 0, 0.5, 1 )
} );

g3d.AddLightSource( { 
  LightColor: JsgColor.RGB(0,0,1),
  LightDir: JsgVect3.New( 0, -0.5, 1 )
} );

Es kann auch die gesamte Beleuchtung auf einmal mit der Funktion SetLight() erzeugt werden:

g3d.SetLight( {
  LightSourceList: 
  [
    {
      LightColor: JsgColor.RGB(1,0,0),
      LightDir: JsgVect3.New( 0, 0.5, 1 )
    },
    {
      LightColor: JsgColor.RGB(0,0,1),
      LightDir: JsgVect3.New( 0, -0.5, 1 )
    }
  ]
} );

Weitere Infos zur Seite
Erzeugt Mittwoch, 27. Januar 2016
von wabis
Zum Seitenanfang
Geändert Freitag, 5. Februar 2016
von wabis