Portieren von Matrix- und Transformationsfunktionen

IRIS GL und OpenGL behandeln Matrizen und Transformationen auf ähnliche Weise. Es gibt jedoch mehrere Unterschiede, die beim Portieren von Code aus IRIS GL zu beachten sind:

  • In OpenGL befinden Sie sich immer im Doppelmatrixmodus. es gibt keinen Einzelmatrixmodus.

  • Winkel werden in Grad statt zehn Grad gemessen.

  • Projektionsmatrixaufrufe wie glFrustum und glOrthomultiplizieren sich jetzt auf die aktuelle Matrix, anstatt in die aktuelle Matrix geladen zu werden.

  • Die OpenGL-Funktion glRotateist sehr anders als die Rotieren von. Sie können um jede beliebige Achse drehen, anstatt auf die x-, y- und z-Achse beschränkt zu sein. Beispielsweise können Sie Folgendes übersetzen:

    rotate(200*(i+1), 'z');
    

    in:

    glRotate(.1*(200*(i+1), 0.0, 0.0, 1.0);
    

    Wenn Sie von "rotate" in "glRotate" übersetzen, wechseln Sie von Zehntel grad zu Grad und ersetzen "z" durch einen Vektor für die Z-Achse.

  • OpenGL hat kein Äquivalent zur Polarview-Funktion. Sie können ihn problemlos durch eine Übersetzung und drei Drehungen ersetzen. Beispielsweise können Sie Folgendes übersetzen:

    polarview(distance, azimuth, incidence, twist);
    
    

    in:

    glTranslatef( 0.0, 0.0, -distance); 
    glRotatef( -twist * 10.0, 0.0, 0.0, 1.0); 
    glRotatef( -incidence * 10.0, 1.0, 0.0, 0.0); 
    glRotatef( -azimuth * 10.0, 0.0, 0.0, 1.0);
    

In der folgenden Tabelle sind die OpenGL-Matrixfunktionen und die entsprechenden IRIS GL-Funktionen aufgeführt.

IRIS GL-Funktion OpenGL-Funktion Bedeutung
mmode glMatrixMode Legt den aktuellen Matrixmodus fest.
glLoadIdentity Ersetzt die aktuelle Matrix durch die Identitätsmatrix.
loadmatrix glLoadMatrixf,glLoadMatrixd
Ersetzt die aktuelle Matrix durch die angegebene Matrix.
multmatrix glMultMatrixf,glMultMatrixd
Post-multipliziert die aktuelle Matrix mit der angegebenen Matrix (beachten Sie, dass multmatrix vorab multipliziert ist).
mapw, mapw2 gluUnProject Projiziert Weltraumkoordinaten in den Objektraum (siehe auch gluProject).
Ortho glOrtho Multipliziert die aktuelle Matrix mit einer orthografischen Projektionsmatrix.
ortho2 gluOrtho2D Definiert eine zweidimensionale orthografische Projektionsmatrix.
Perspektive gluPerspective Definiert eine Perspektivische Projektionsmatrix.
picksize gluPickMatrix Definiert einen Auswahlbereich.
popmatrix glPopMatrix Popt den aktuellen Matrixstapel und ersetzt die aktuelle Matrix durch die darunter.
pushmatrix glPushMatrix Pusht den aktuellen Matrixstapel um eins nach unten und dupliziert die aktuelle Matrix.
**rotieren,**rotieren
glRotated,glRotatef
Dreht das aktuelle Koordinatensystem um den angegebenen Winkel um den Vektor vom Ursprung bis zum angegebenen Punkt. Beachten Sie, dass die Drehung nur um die x-, y- und z-Achse gedreht wurde.
scale glScaled,glScalef
Multipliziert die aktuelle Matrix mit einer Skalierungsmatrix.
translate glTranslatef,glTranslated
Verschiebt den Ursprung des Koordinatensystems an den angegebenen Punkt, indem die aktuelle Matrix mit einer Übersetzungsmatrix multipliziert wird.
Fenster glFrustum Bei angegebenen Koordinaten für Clippingebenen multipliziert die aktuelle Matrix mit einer Perspektivmatrix.

OpenGL verfügt über drei Matrixmodi, die mit glMatrixMode festgelegt werden. In der folgenden Tabelle sind die Modi aufgeführt, die als Parameter für glMatrixMode verfügbar sind.

IRIS GL-Matrixmodus OpenGL-Modus Bedeutung Mindeststapeltiefe
MTEXTURE GL _ TEXTURE Wird auf dem Texturmatrixstapel verwendet. 2
MVIEWING GL _ MODELVIEW Wird auf dem Matrixstapel der Modellansicht verwendet. 32
MPROJECTION _GL-PROJEKTION Wird auf dem Projektionsmatrixstapel verwendet. 2