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 |