Hi,
Ich versuche zur Zeit mir eine kleine Funktion zu schreiben die mir zu jeder Zeit einen Hintergrund rendern kann (das bedeutet ich will den z-buffer verwenden und nicht einfach komplett drüberrendern).
Ich dachte eigentlich, dass ich soweit verstanden hätte, wie es funktioniert, aber anscheinend ist das doch nicht der Fall. Was ich ich versucht habe:
Ich pushe alle Matrix-Stacks und lade die Identitätsmatrix, bei Projektion erzeug ich eine Matrix für parallelprojektion. Dann male ich ein Quad welches den ganzen bildschirm füllen sollte, mit passenden textur-koordinaten. Hier mein Code bis jetzt:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glOrtho(0, 1, 1, 0, 1, -1);
glMatrixMode(GL_TEXTURE);
glPushMatrix();
glLoadIdentity();
glDisable(GL_LIGHTING);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, 1000);
glBegin(GL_QUADS);
glVertex3i(0, 0, -1);
// glNormal3i(0, 0, 1);
glTexCoord2i(0, 0);
glVertex3i(0, 1, -1);
// glNormal3i(0, 0, 1);
glTexCoord2i(0, 1);
glVertex3i(1, 1, -1);
// glNormal3i(0, 0, 1);
glTexCoord2i(1, 1);
glVertex3i(1, 0, -1);
// glNormal3i(0, 0, 1);
glTexCoord2i(1, 0);
glEnd();
glDisable(GL_TEXTURE_2D);
glEnable(GL_LIGHTING);
glPopMatrix();
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
|
Irgendwo muss ich hier einen Denkfehler haben, denn die Textur scheint um 90° gedreht und Spiegelverkehrt zu sein. Außerdem gibt es Probleme wenn ich andere Objekte mit ins Spiel bringe, diese werden nicht gerendert (wenn ich den z-buffer ausschalte während ich den background rendere schon). Außerdem scheinen sich dann auch die texturkoordinaten zu verändern, denn das hintergrundbild wird dann total verzerrt und falsch dargestellt. Dadurch, dass ich überall den Matrixstack pushe und "resette" dürften andere gerenderte objekte doch eigentlich garkeine auswirkung hierauf haben. Kann mir jemand sagen, was hier schief läuft? Wäre sehr dankbar