Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Anonymous

unregistriert

1

09.08.2005, 22:58

OpenGL Problem

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?

DrthM2001

Alter Hase

Beiträge: 721

Wohnort: Karlsruhe

  • Private Nachricht senden

2

10.08.2005, 00:11

Neee so ein glEnable nimmt nicht viel Performance... Ich hab mir den code auf codeworx nicht angeschaut, aber wie ich das jetzt verstanden habe, ist deine lösung richtig. warscheinlich wird in der anderen funktion GL_TEXTURE_2D disabled, dann mussts halt wieder enablen. Ganz normal...

Anonymous

unregistriert

3

10.08.2005, 01:43

Alles klar, dann lasse ich dass einfach mal so, dankeschön :top:

Werbeanzeige