Bisher nutzen wir die Funktion glFrustum um unsere Projektionsmatrix zu erzeugen. Diese Funktion ist in neueren Versionen von OpenGL deprecated und wir ersetzen sie daher durch unsere eigene Implementierung. Die Signatur ist angelehnt an die Funktion D3DXMatrixPerspectiveFovRH aus der DirectX Welt.

Neue Projektionsmatrix

Finden Sie die Stelle in der graphics.cpp wo aktuell glFrustum aufgerufen wird und ersetzen Sie den Aufruf durch den folgenden:

...
double zNear = 0.1;
double zFar = 100.0;
double fov = 0.785; //45deg
double aspect = (double)viewportWidth / (double)viewportHeight;
Matrix projectionMatrix = matrixPerspective(fov, aspect, zNear, zFar);

glMatrixMode(GL_PROJECTION);
glLoadMatrixf(projectionMatrix.values);

Nach dieser Änderung sollten Sie immer noch ein grünes Viereck sehen, genau wie vorher. Falls Ihr Viereck verzerrt oder nicht sichtbar ist, dann stimmt etwas nicht.

ViewMatrix änderbar machen

Während die Projektionsmatrix nur geändert werden muss, wenn sich das Seitenverhältnis des Fensters ändert, muss die ViewMatrix zukünftig immer geändert werden wenn die Kamera bewegt wird. Damit diese Änderung auch von außen durchgeführt werden kann, legen wir eine weitere öffentliche Funktion in der graphics.cpp an:

void graphicsSetViewMatrix(Matrix m)
{
    viewMatrix = m;
}