Zum Inhalt

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.tik und cna.tok: tik startet einen Timer und tok stoppt ihn und gibt die vergangene Zeit in Millisekunden zurück.
  • glStart() startet die OpenGL Ansicht für den gesamten Umgriff
  • glQuit() beendet die Darstellung
  • glRedraw() malt die 3D-Darstellung neu, nachdem die Kameraposition mit glSetCameraPosition(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 muss glQuit() und glStart() ausgeführt werden.
  • glGetCameraPosition() gibt die aktuelle Kameraposition als Drei-Tupel zurück
  • glSetCameraPosition(x,y,z) verschiebt die Kamera an die absolute Position (x,y,z)
  • glMoveCameraPosition(x,y,z) verschiebt die Kamera relativ zur aktuellen Position
  • glGetCameraLookAt() gibt den Punkt auf den die Kamera schaut als Drei-Tupel zurück
  • glSetCameraLookAt(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ück
  • glSavePreset(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 muss
  • glScreenshot(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.