Das Camera Objekt stellt eine virtuelle Kamera dar, welche auf das 3D-Modell gerichtet ist. Wie bei einer echten Kamera können Position, Blickrichtung, Abstand zum Objekt, Neigung, Zoom und Blende eingestellt werden. Das Camera Objekt wird beim Erzeugen des JsGraph3D Objektes angelegt. Die Einstellungen werden mit den JsgCamera Funktionen vorgenommen und können über die JsgCamera Properties abgefragt werden.
}
Das Camera Objekt wird beim Erzeugen des JsGraph3D Objektes angelegt. Camera ist ein Property der JsGraph3D Klasse. Verwende die JsgCamera Funktionen, um die Kamera-Einstellungen zu ändern.
Das Verändern von JsgCamera Properties mit den JsgCamera Funktionen bewirkt eine Neuberechnung der Viewing-Transformation CamTrans, sobald das Bild mit DrawDisplayList() neu gezeichnet wird.
Aperture | Blende der Kamera, beeinflusst die globale Helligkeit der Szenerie: < 1 → abdunkeln, > 1 → aufhellen der Scene |
Zoom | Vergrössert oder verkleinert die Darstellung der Szenerie: < 1 → verkleinern, > 1 → vergrössern der Scene |
ScreenSize | Grösse des 2D-Fensters, in dem das 3D-Bild abgebildet wird |
SceneSize | Grösse der abzubildenden Szenerie |
ObjectZExtend | Verschiebt die Bezugsebene für SceneSize näher zur Kamera |
CamViewCenter | Zentrum, auf das die Kamera ausgerichtet ist |
CamPos | Position der Kamera im 3D-Modell |
CamUp | Richtung der vertikalen Achse der Kamera |
ViewDir | Blickrichtung der Kamera |
ViewCenterDist | Abstand der Kamera vom CamViewCenter |
ScreenDist | Abstand der Bildebene der Kamera von der Kamera-Position CamPos |
CamTrans | Transformations-Matrix für die Viewing-Transformation |
HighResolution | Steuert, ob bei Retina-Displays hoch aufgelöst gezeichnet werden soll oder nicht |
Einige Camera-Funktionen sollten nicht direkt gerufen werden, sondern über die unten aufgeführten JsGraph3D-Funktionen.
JsgCamera.Trans() | Viewing-Transformation eines JsgVect3 |
JsgCamera.TransTo() | Viewing-Transformation eines JsgVect3 |
JsgCamera.TransPoly() | Viewing-Transformation eines JsgPolygon |
JsgCamera.TransList() | Viewing-Transformation einer JsgVect3List |
JsgCamera.TransGrid() | Viewing-Transformation eines JsgVect3Grid |
JsgCamera.TransToPoly2D() | Viewing-Transformation einer JsgVect3List und Reduktion der 3D-Vektoren zu einem 2D JsgPolygon |
ResetCamera() | Setzt alle Camera Properties auf die Initialwerte zurück → JsgCamera Klasse |
SetCameraScale() | Berechnet einen Standard-Zoomwert aus Scenen- und Window-Grösse |
SetCamera() | Setzt frei wählbare JsgCamera Properties |
SetCameraPos() | Setzt Kamera-Position und Blickrichtung über die drei Vektoren Pos, Center, Up |
SetCameraView() | Setzt Kamera-Position und Blickrichtung über CamViewCenter, zwei Winkel und Abstand zum CamViewCenter, sowie dem Up Vektor |
SetCameraZoom() | Setzt den Zoom der Kamera |
SetCameraAperture() | Setzt die Blende der Kamera |
SetCameraHighResolution() | Steuert, ob bei Retina-Displays hoch aufgelöst gezeichnet werden soll oder nicht |
SetCameraClipping() | Aktiviert/Deaktiviert das Kamera-Clipping |
SaveCamera() | Sichert die JsgCamera Properties in einem Objekt. |
JsgCamera.Aperture: Number(>0); ReadOnly; Init = 1; → SetCameraAperture()
Die Blende (Aperture) beeinflusst die globale Helligkeit der Grafik, wenn auf diese ein Beleuchtungs-Modus angewandt wird. Werte grösser als 1 hellen das Bild auf, Werte kleiner als 1 dunkeln es ab.
JsgCamera.Zoom: Number(>0); ReadOnly; Init = 1; → SetCameraZoom(), SetCameraScale()
Wert grösser als 1 vergrössert das Bild, Wert kleiner als 1 verkleinert das Bild. Die Grösse des Bildausschnitts bei Zoom = 1 wird weiter bestimmt durch ScreenSize und SceneSize, wobei auch ObjectZExtend einen Einfluss hat.
JsgCamera.ScreenSize: Number(>0); ReadOnly; Init = 1; → SetCameraScale()
Grösse des 2D-Fensters, in dem das 3D-Bild abgebildet wird. Sinnvollerweise setzt man hier die Breite oder Höhe des mit SetWindow() definierten Bereiches ein oder Ruft vor dem Zeichnen von Grafik die Funktion SetWindowToCameraScreen() auf, um das Window entsprechend der SceenSize einzustellen.
JsgCamera.SceneSize: Number(>0); ReadOnly; Init = 2; → SetCameraScale()
Breite oder Höhe der 3D-Objekte, welche innerhalb der ScreenSize abgebildet werden sollen. Die SceneSize bezieht sich auf eine Ebene, die durch das CamViewCenter geht. Mit ObjectZExtend kann diese Ebene näher zur Kamera hin verschoben werden, damit auch näher gelegene Objekte noch vollständig im Fenster dargestellt werden.
JsgCamera.ObjectZExtend: Number(>=0); ReadOnly; Init = 0; → SetCameraScale()
Verschiebt die Bezugsebene für die SceneSize näher zur Kamera. Für die Beschreibung dieses Properties siehe SceneSize.
JsgCamera.CamViewCenter: JsgVect3; ReadOnly; Init = JsgVect3.Null(); → JsgCamera Funktionen
Zentrum, auf das die Kamera ausgerichtet ist. Das Zentrum ergibt sich entweder aus einer direkten Vorgabe mit den Funktionen SetCameraPos() und SetCameraView() oder aus CamPos, ViewDir und ViewCenterDist.
JsgCamera.CamPos: JsgVect3; ReadOnly; Init = JsgVect3.New(100,0,0); → JsgCamera Funktionen
Gibt die Position der Kamera in 3D-Modell an.
JsgCamera.CamUp: JsgVect3; ReadOnly; Init = JsgVect3.New(0,0,1)
Gibt an, in welcher Richtung die vertikale Achse der Kamera zeigt. Dieser Vektor ist immer normiert (Länge = 1).
JsgCamera.ViewDir: JsgVect3; ReadOnly; Init = JsgVect3.New(-1,0,0); → SetCamera()
Gibt die Blickrichtung der Kamera an. Dieser Vektor ist immer normiert (Länge = 1).
JsgCamera.ViewCenterDist: Number; ReadOnly; Init = 100; → SetCameraView()
Gibt den Abstand der Kamera vom CamViewCenter an.
JsgCamera.ScreenDist: Number; ReadOnly; Init = 50; → JsgCamera Funktionen
Abstand der Bildebene der Kamera von der Kamera-Position CamPos. Dieser Wert wird aus den Properties SceneSize, ScreenSize und ViewCenterDist berechnet und für die Viewing-Transformation benötigt.
JsgCamera.CamTrans: JsgMat3; ReadOnly; Init = [[1,0,0][0,1,0][0,0,1]]; → JsgCamera Funktionen
Transformations-Matrix, welche von Objekt- in Kamera-Koordinaten transformiert. Diese JsgMat3 wird aus diversen JsgCamera Properties berechnet.
JsgCamera.HighResolution: String; ReadOnly; Init = ''; → SetCameraHighResolution()
Definiert, ob bei Retina-Displays hoch aufgelöst gezeichnet werden soll oder nicht. HighResolution kann einen der folgenden drei Werte haben:
Der Wert des Properties HighResolution kann über die Funktion SetCameraHighResolution() verändert werden. Vor dem Zeichnen der Grafik mit DrawDisplayList() wird der aktuelle Wert an das JsGraph3D Objekt weitergereicht; siehe Funktion SetHighResolution().
Bei Nicht-Retina-Displays hat HighResolution keine Auswirkung.
JsgCamera.Trans( Vec )
Führt eine Abbildungs-Transformation des Vektors Vec durch und gibt das Resultat als neuen Vektor vom Typ JsgVect3 zurück.
JsgCamera.TransTo( x, y, z, toVect )
Führt eine Abbildungs-Transformation des Vektors (x,y,z) durch und gibt das Resultat in toVect zurück, falls definiert. Wenn toVect nicht definiert ist wird das Resultat im internen Vektor this.WorkPoint gespeichert.
JsgCamera.TransPoly( poly, transPolys )
Führt eine Abbildungs-Transformation des Polygons poly durch. Wenn transPolys definiert ist, wird das resultierende Polygon darin mit JsgPolygon.AddPoint() oder JsgPolygonList.AddPoint() abgespeichert. transPolys muss eventuell vorher mit JsgPolygon.Reset() gelöscht werden. Wird transPolys nicht definiert, wird das transformierte Polygon im internen Polygin this.ResultPoly gespeichert.
JsgCamera.TransList( VecList )
Führt eine Abbildungs-Transformation der Vektoren in der Liste VecList durch und gibt das Resultat als neue Vektor-Liste vom Typ JsgVect3List zurück.
JsgCamera.TransGrid( VecGrid )
Führt eine Abbildungs-Transformation der Vektoren im Gitter VecGrid durch und gibt das Resultat als neues Vektor-Gitter vom Typ JsgVect3Grid zurück.
JsgCamera.TransToPoly2D( VecList, Poly )
Führt eine Abbildungs-Transformation auf die Vektor-Liste VecList durch (siehe JsgCamera.TransList()). Die resultierenden 3D-Vektoren werden auf 2 Dimensionen reduziert, indem die Z-Komponente ignoriert wird. Wenn Poly definiert und vom Typ JsgPolygon ist, werden die resultierenden 2D-Vektoren in Poly gespeichert. Ist Poly nicht definiert, wird ein neues JsgPolygon erzeugt, in welchem die 2D-Vektoren gespeichert werden. Diese neue Polygon, oder Poly falls definiert, wird zurückgegeben.
JsGraph3D.ResetCamera( )
Setzt die Kamera-Properties auf ihre Standard-Werte zurück (siehe JsgCamera Klasse).
JsGraph3D.SetCamera( Params )
Wenn Params nicht definiert wird, werden die JsgCamera Properties auf ihre Default-Werte gesetzt, wie bei ResetCamera()
}
Die Kamera-Position kann entweder mit dem Property CamPos oder durch Angabe der Properties CamHAng, CamVAng und CamDist angegeben werden.
Parameter, welche in Params nicht definiert sind, verändern die zugehörigen Kamera-Properties nicht.
JsGraph3D.SetCameraScale( SceneSize, ScreenSize, ObjectZExtend, Zoom )
Wenn ein Argument undefiniert ist oder null übergeben wird, so wird das entsprechende JsgCamera-Property nicht geändert. So können mit dieser Funktion gezielt einzelne Properties der Kamera verändert werden. Siehe auch SetCamera().
JsGraph3D.SetCameraPos( Pos, ViewCenter, Up )
Setzt Kamera-Position und Blickrichtung über die drei Vektoren Pos, ViewCenter, Up.
Wenn ein Argument undefiniert ist oder null übergeben wird, so wird das entsprechende JsgCamera-Property nicht geändert. Somit können mit dieser Funktion gezielt einzelne Properties der Kamera verändert werden. Siehe auch SetCamera().
JsGraph3D.SetCameraView( ViewCenter, HAngle, VAngle, ViewDist, Up )
Setzt Kamera-Position und Blickrichtung über ViewCenter, zwei Winkel und Abstand zum ViewCenter, sowie dem Up Vektor.
Die Kamera-Position wird wiefolgt berechnet. Es wird ein Vektor aus den beiden Winkeln konstruiert, der die Länge ViewDist erhält. Dieser Vektor wird zum ViewCenter addiert und ergibt so die Kamera-Position CamPos.
Wenn ein Argument undefiniert ist oder null übergeben wird, so wird das entsprechende JsgCamera-Property nicht geändert. Somit können mit dieser Funktion gezielt einzelne Properties der Kamera verändert werden. Siehe auch Setcamera().
JsGraph3D.SetCameraZoom( Zoom )
Setzt das Kamera-Proprty Zoom. Der Bildausschnitt kann hiermit vergrössert oder verkleinert werden, ohne die Kameraposition zu verändern.
JsGraph3D.SetCameraAperture( Aperture )
Setzt das Kamera-Property Aperture. Mit der Kamera-Blende (Aperture) kann die Gesamthelligkeit des Bildes eingestellt werden.
JsGraph3D.SetCameraHighResolution( Mode )
Definiert, ob bei Retina-Displays hoch aufgelöst gezeichnet werden soll oder nicht. HighResolution kann einen der folgenden drei Werte haben:
Vor dem Zeichnen der Grafik mit DrawDisplayList() wird der aktuelle Wert an das JsGraph3D Objekt weitergereicht, siehe Funktion SetHighResolution().
Bei Nicht-Retina-Displays hat HighResolution keine Auswirkung.
Für animierte Darstellungen kann es von Vorteil sein, Mode = 'off' zu setzen, um Resourcen zu sparen und mehr Bilder pro Sekunde darstellen zu können. Insbesondere auf mobilen Geräten mit Retina-Displays macht diese Einstellung Sinn.
JsGraph3D.SetCameraClipping( clipPlaneDist )
Wenn 3D Grafik hinter die Bildebene der Kamera gerät, wird diese in den Bereich vor der Ebene geworfen, was zu falschen Darstellungen führt. Dies kann verhindert werden, indem alle Grafik an der Bildebene der Kamera oder einer Ebene davor geclippt wird.
Mit cliPlaneDist wird der Abstand der Clippeneben vom Kamera-Zentrum in Blickrichtung angegeben.
JsGraph3D.SaveCamera( Params )
Sichert alle JsgCamera Properties in ein Objekt. Wenn Params ein Objekt ist, werden die Properties in diesem Objekt abgespeichert. Wenn Params kein Objekt ist, wird intern ein neues Objekt zum Speichern der Properties erzeugt. Das Objekt mit den gespeicherten Properties wird als Returnwert zurückgegeben.
Mit der Funktion SetCamera() können die gesicherten Properties in die Camera zurückgeschrieben werden.