Hallo,
erst mal sorry für die nichtssagende Überschrift, aber das Problem lässt sich nicht so kurz fassen...
Also ich hab mir aus diesen beiden Tutorials von codeworx ein kleines Programm zusammengebaut:
http://www.codeworx.org/opengl_tut3.php
http://www.codeworx.org/opengl_tut20.php
Es werden ca 50 untexturierte (nur gefärbte) Quads und ein texturiertes und maskiertes auf den Bildschirm gezeichnet. Das Geschieht jeweils etwa so:
|
C-/C++-Quelltext
|
1
2
3
4
|
void UntexturiertesQuadMalen(float xPos, float yPos, float zPos)
{
//untexturiertes Quad malen
}
|
und so:
|
C-/C++-Quelltext
|
1
2
3
4
|
void MaskiertesQuadMalen(float xPos, float yPos, float zPos)
{
//Maskiertes Quad malen
}
|
die werden dann in der Spiel- Schleife so aufgerufen:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
|
for (int i=0; i<50; i++)
{
UntexturiertesQuadMalen(1.0f, 1.0f, 1.0f)
{
MaskiertesQuadMalen(1.0f, 1.0f, 1.0f)
|
so weit müsste das ja eigentlich klappen. Tuts aber nicht. wenn ich die beiden Zeichnen- Funktionen einzeln aufrufe, dann klappt alles, aber sobald sie beide im Code sind, tut garnichts mehr. Da werden die untexturierten plötzlich kohlrabenschwarz, während das Maskierte ganz normal angezeigt wird. Ich will sie aber beide auf einen Bildschirm bringen.
Ich habauch schon eine Lösung: in der Funktion, die das maskierte Quad malt, muss ich am Anfang 2D Mapping aktivieren und am Schluss wieder deaktivieren dann gehts. Also so:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
|
void MaskiertesQuadMalen(float xPos, float yPos, float zPos)
{
glEnable(GL_TEXTURE_2D);
//Maskiertes Quad malen
glDisable(GL_TEXTURE_2D);
}
|
ich habe aber das Gefühl, dass diese Lösung weder elegant noch besonders Performance- sparend ist. Was mache ich falsch?