3D-Spezial
Die 3D-Spezial Ansicht kann mit einigen rudimentären Befehlen von LUA aus gesteuert werden. Diese kann beispielsweise zur visuellen Überprüfung der Ergebnisse am Ende des Skripts oder auch für einfache Kamerafahrten genutzt werden.
- Funktionen
cna.tikundcna.tok:tikstartet einen Timer undtokstoppt ihn und gibt die vergangene Zeit in Millisekunden zurück. glStart()startet die OpenGL Ansicht für den gesamten UmgriffglQuit()beendet die DarstellungglRedraw()malt die 3D-Darstellung neu, nachdem die Kameraposition mitglSetCameraPosition(x,y,z)geändert wurde. Der Befehl gibt die für das Malen benötigte Zeit in Millisekunden zurück. Hinweis: Dieser Befehl führt keine Aktualisierung von Objekten/DGM durch. Hierzu mussglQuit()undglStart()ausgeführt werden.glGetCameraPosition()gibt die aktuelle Kameraposition als Drei-Tupel zurückglSetCameraPosition(x,y,z)verschiebt die Kamera an die absolute Position (x,y,z)glMoveCameraPosition(x,y,z)verschiebt die Kamera relativ zur aktuellen PositionglGetCameraLookAt()gibt den Punkt auf den die Kamera schaut als Drei-Tupel zurückglSetCameraLookAt(x,y,z)verschiebt den Punkt, auf den die Kamera schaut. Achtung: Darf nicht identisch mit der Kameraposition sein und beide -dürfen sich auch nicht nur in der Höhe (z Koordinate) unterscheiden.glRotateCameraRight(d)rotiert die Kamera um den angegebenen Winkel in Grad nach rechts (negativ = nach links); nur gültig für kleine Winkeländerungen!glRotateCameraUp(d)rotiert die Kamera um den angegebenen Winkel in Grad nach oben (negativ = nach unten); nur gültig für kleine Winkeländerungen und der akkumulierte Winkel muss im Bereich [-85;85] liegen.glReset3dAppearance()setzt die Kamera auf den Standardwert zurückglSavePreset(d)speichert die aktuelle Kameraposition und -richtung im gegebenen Preset ab, gültige Werte liegen im Bereich [1;10]glLoadPreset(d)lädt das angegebene Preset, welches vorhanden sein mussglScreenshot(p,w,h)speichert das aktuelle Bild unter dem Pfad p ab (optional: mit Breite w und Höhe h in Pixel).- erlaubte Dateiformate mit Option BMP: alle gängigen Bildformate
- erlaubtes Dateiformat ohne Option BMP: nur BMP
Hinweis
Das resultierende Bild entspricht immer der aktuellen Kamerakonfiguration und muss nicht mit dem auf dem Bildschirm angezeigten Bild übereinstimmen!
- Um eine stabile Framerate zu erzeugen ist die Verwendung der Funktion
cna.wait(x)empfohlen, welche x Millisekunden wartet, bevor die nächste Funktion ausgeführt wird.Beispiel:
-- inside any loop
local frameRenderTime = cna.glRedraw()
local minRenderTime = 1/60
if(frameRenderTime < 1/60) then
cna.wait(minRenderTime - frameRenderTime)
end
Hinweis
Die Kamera-Position und -Orientierung sollten immer zusammen gesetzt werden. Hinterher muss glRedraw() aufgerufen werden, damit die Änderung sichtbar wird.