WaBis

walter.bislins.ch

JSGX3D: JsgCamera

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 und Zoom eingestellt werden. Das Camera Objekt wird beim Erzeugen des JsGraphX3D Objektes angelegt. Die Einstellungen werden mit den JsgCamera Funktionen vorgenommen und können über die JsgCamera Properties abgefragt werden.

JsgCamera Klasse

JsgCamera = {
Zoom: Number(>0); ReadOnly; Init = 1
ScreenSize: Number(>0); ReadOnly; Init = 1
SceneSize: Number(>0); ReadOnly; Init = 2
ObjectZExtend: Number(>0); ReadOnly; Init = 0
CamViewCenter: JsgVect3; ReadOnly; Init = JsgVect3.New(0,0,0)
CamPos: JsgVect3; ReadOnly; Init = JsgVect3.New(100,0,0)
CamUp: JsgVect3; ReadOnly; Init = JsgVect3.New(0,0,1)
ViewDir: JsgVect3; ReadOnly; Init = JsgVect3.New(-1,0,0)
ViewCenterDist: Number; ReadOnly; Init = 100
ScreenDist: Number; ReadOnly; Init = 50
CamTrans: JsgMat3; ReadOnly; Init = JsgMat3.Unit()
}

Das Camera Objekt wird beim Erzeugen des JsGraphX3D Objektes angelegt. Camera ist ein Property der JsGraphX3D 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.

JsgCamera Properties

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

JsgCamera Funktionen

Einige Camera-Funktionen sollten nicht direkt gerufen werden, sondern über die unten aufgeführten JsGraphX3D-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
SetCameraClipping() Aktiviert/Deaktiviert das Kamera-Clipping
SaveCamera() Sichert die JsgCamera Properties in einem Objekt.

Siehe auch SetWindowToCameraScreen().

JsgCamera.Zoom

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

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 SceneSize einzustellen.

JsgCamera.SceneSize

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

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

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

JsgCamera.CamPos: JsgVect3; ReadOnly; Init = JsgVect3.New(100,0,0);JsgCamera Funktionen

Gibt die Position der Kamera in 3D-Modell an.

JsgCamera.CamUp

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

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

JsgCamera.ViewCenterDist: Number; ReadOnly; Init = 100;SetCameraView()

Gibt den Abstand der Kamera vom CamViewCenter an.

JsgCamera.ScreenDist

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

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.Trans()

JsgCamera.Trans( Vec )

Vec: JsgVect3
Zu transformierender Vektor
Return: JsgVect3
Resultierender Vektor

Führt eine Abbildungs-Transformation des Vektors Vec durch und gibt das Resultat als neuen Vektor vom Typ JsgVect3 zurück.

JsgCamera.TransTo()

JsgCamera.TransTo( x, y, z, toVect )

x, y, z: Number
Zu transformierender Vektor
toVect: JsgVect3; Optional
Resultats-Vektor
Return v or this.WorkPoint: JsgVect3

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()

JsgCamera.TransPoly( poly, transPolys )

poly: JsgPolygon
Zu transformierendes Polygon
transPolys: JsgPolygon or JsgPolygonList; Optional
zum Speichern des Transformierten Polygons
Return transPolys or this.ResultPoly: JsgPolygon or JsgPolygonList

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()

JsgCamera.TransList( VecList )

VecList: JsgVect3List
Zu transformierende Vektor-Liste
Return: JsgVect3List
Resultierende Vektor-Liste

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()

JsgCamera.TransGrid( VecGrid )

VecGrid: JsgVect3Grid
Zu transformierendes Vektor-Gitter
Return: JsgVect3Grid
Resultierende Vektor-Liste

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()

JsgCamera.TransToPoly2D( VecList, Poly )

VecList: JsgVect3List
Zu transformierende Vektor-Liste
Poly: JsgPolygon; Optional
Polygon, in welchem die resultierenden 2D-Vektoren gespeichert werden sollen
Return: new JsgPolygon or poly
Resultierendes 2D-Polygon

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.

JsGraphX3D.ResetCamera()

JsGraphX3D.ResetCamera( )

Setzt die Kamera-Properties auf ihre Standard-Werte zurück (siehe JsgCamera Klasse).

JsGraphX3D.SetCamera()

JsGraphX3D.SetCamera( Params )

Params: JsgCameraDef; Optional; Default = undefined

Wenn Params nicht definiert wird, werden die JsgCamera Properties auf ihre Default-Werte gesetzt, wie bei ResetCamera()

JsgCameraDef

JsgCameraDef = {
SceneSize: Number(>0); Optional; Init = 2
Grösse der Scene
ScreenSize: Number(>0); Optional; Init = 1
Grösse des Windows; Min( Breite, Höhe )
ObjectZExtend: Number; Optional; Init = 0
Bezugsebene für SceneSize; positiver Wert für Richtung zur Kamera hin → ObjectZExtend
CamViewCenter: JsgVect3; Optional; Init = JsgVect3.Null()
Punkt, der von der Kamera anvisiert wird → CamViewCenter
CamUp: JsgVect3; Optional; Init = JsgVect3.New(0,0,1)
Richtung der vertikalen Kamera-Achse → CamUp
CamPos: JsgVect3; Optional; Init = JsgVect3.New(100,0,0)
Position der Kamera → CamPos
CamHAng, CamVAng: Number; Optional; Init = 0
Richtungswinkel vom CamViewCenter zur CamPos
CamDist: Number(>0); Optional; Default = 100
Abstand der Kamera vom CamViewCenterViewCenterDist
Zoom: Number(>0); Optional; Default = 1
Zoom-Faktor; kleiner 1 verkleinert das Bild → Zoom
}

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.

JsGraphX3D.SetCameraScale()

JsGraphX3D.SetCameraScale( SceneSize, ScreenSize, ObjectZExtend, Zoom )

SceneSize: Number(>0); Optional
Abmessung der abzubildenden 3D-Welt.
ScreenSize: Number(>0); Optional
Grösse des Windows. Standardwert ist 1.
ObjectZExtend: Number; Optional
SceneSize bezieht sich standardmässig auf eine Ebene, welche durch das CamViewCenter geht (meist der Nullpunkt der Welt). Wenn jedoch zur Kamera näher gelegene Objekte ins Bild passen sollen, so kann mit einem positiven ObjectZExtend die Bezugsebene in Richtung Kamera verschoben werden.
Zoom: Number(>0); Optional
Die Szene kann mit diesem Wert vergrössert (Zoom > 1) oder verkleinert (Zoom < 1) werden, ohne dass die Abbildungs-Transformation geändert werden muss.

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().

JsGraphX3D.SetCameraPos()

JsGraphX3D.SetCameraPos( Pos, ViewCenter, Up )

Pos: JsgVect3; Optional
Position der Kamera
ViewCenter: JsgVect3; Optional
Dieser Punkt wird von der Kamera anvisiert. Dieses Argument bestimmt auch die Properties ViewDir und ViewCenterDist.
Up: JsgVect3; Optional
Richtung der vertikalen Achse der Kamera. Dieser Vektor wird vor dem Speichern im Property CamUp normiert und so transformiert, dass er senkrecht zur X- und Z-Achse der Kamera ist. Die Z-Achse zeigt in Richtung des CamViewCenters, die X-Achse ist die horizontale Achse des Bildschirms.

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().

JsGraphX3D.SetCameraView()

JsGraphX3D.SetCameraView( ViewCenter, HAngle, VAngle, ViewDist, Up )

ViewCenter: JsgVect3; Optional
Dieser Punkt wird von der Kamera anvisiert. Dieses Argument bestimmt auch die Properties ViewDir und ViewCenterDist.
HAngle: Number; Optional
Horizontaler Winkel um die Z-Achse, gemessen von der X-Achse aus in Richtung Y-Achse in Grad.
VAngle: Number; Optional
Vertikaler Winkel, gemessen von der X/Y-Ebene in Richtung Z-Achse in Grad.
ViewDist: Number(>0); Optional
Abstand der Kamera-Position CamPos vom CamViewCenter. Dieser Wert muss so gross gewählt werden, dass keine Teile oder ganze Objekt hinter die Kamera zu liegen kommen, da es sonst zu falschen Darstellungen des Objektes kommt.
Up: JsgVect3; Optional
Richtung der vertikalen Achse der Kamera. Dieser Vektor wird vor dem Speichern im Property CamUp normiert und so transformiert, dass er senkrecht zur X- und Z-Achse der Kamera ist. Die Z-Achse zeigt in Richtung des CamViewCenters, die X-Achse ist die horizontale Achse des Bildschirms.

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().

JsGraphX3D.SetCameraZoom()

JsGraphX3D.SetCameraZoom( Zoom )

Zoom: Number(>0); Optional; Default = 1

Setzt das Kamera-Proprty Zoom. Der Bildausschnitt kann hiermit vergrössert oder verkleinert werden, ohne die Kameraposition zu verändern.

JsGraphX3D.SetCameraClipping()

JsGraphX3D.SetCameraClipping( clipPlaneDist )

clipPlaneDist: Number(>=0)
0 → Clipping deaktivieren

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 clipPlaneDist wird der Abstand der Clippeneben vom Kamera-Zentrum in Blickrichtung angegeben.

JsGraphX3D.SaveCamera()

JsGraphX3D.SaveCamera( Params )

Params: Object; Optional; Default = { }
Falls definiert werden die JsgCamera Properties in diesem Objekt gespeichert. Sonst werden die Properties in einem neuen Objekt gespeichert.
Return: Object or 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.

Weitere Infos zur Seite
Erzeugt Montag, 15. Februar 2016
von wabis
Zum Seitenanfang
Geändert Freitag, 1. November 2019
von wabis