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

Databyte

Alter Hase

  • »Databyte« ist der Autor dieses Themas

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

1

29.06.2009, 23:46

OpenGL und ich verzweifle

Hi

Sry für den schlechten Titel, aber er entspricht gerade der Wahrheit....;)
Im voraus muss ich noch gestehen, dass ich eigentlich keine Ahnung
von OpenGL habe, bis auf das was ich mir bis jetzt zusammenreim konnte, was aber auch nicht so schwer war ( mit Farben und Vectoren pushen etc)

Also ich bin gerade dabei eine Partikelengin die auch eine SFML komponente enthält, welche aber nicht funktioniert,
umzuschreiben, damit sie mit SFML funktioniert. Intern arbeitet diese Engine mit OpenGL.
Ich hab jetzt halt alles soweit umgeschrieben und es lässt sich auch fehlerfrei kompilieren.
Es gibt nur leider 1 problem. Das Partikelsystem funktioniert perfekt nur wird es nicht angezeigt....
mit glGetError bekomme ich auch keinen fehler.. Jetzt steh ich natürlich
vor einem Rätzel... ich habe dann verglichen wie SFML es intern macht,
konnte aber keine nennenswerten unterschiede erkennen... desshalb wollte
ich fragen, welche ursachen es haben kann, dass openGL etwas nicht zeichnet (bzw nichts auf dem bildschirm angezeigt wird...
Auf folgende bin ich schon gekommen:

- Direkt nach dem zeichnen wird alles mit Clear wieder gelöscht ( ist nicht der fall)
- Vektoren sind außerhalb des bildschirms (ist auch nicht der fal - hab ich mit dem debugger überprüft)
- Volle Tranzparenz (ist auch nicht der Fall )
- Die Render-funktionen werden gar nicht erst aufgerufen ( das ist auch nicht der fall ;) )

Ich hab keinen blassen schimmer mehr, woran es liegen könnte und bitte um weitere vorschläge ;)
Ich hab ein paar zeilen code mal kopiert (hoffe sind die richtigen):


Hier begint der Zeichenvorgang ( diese funktionen werden alle innerhalb von sf::Drawable::Draw aufgerufen ):

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
        if (blendMode == sf::Blend::None)
            glDisable(GL_BLEND);
        else
        {
            glEnable(GL_BLEND);

            switch (blendMode)
            {
            case sf::Blend::Alpha :
                glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
                break;

            case sf::Blend::Add :      
                glBlendFunc(GL_SRC_ALPHA,GL_ONE);                 
                break;
           
            case sf::Blend::Multiply : 
                glBlendFunc(GL_DST_COLOR,GL_ZERO);                
                break;
            }
        }

        if (image != NULL)
            image->Bind();

        glBegin(GL_QUADS);



Hier werden die Partikel gerendert:

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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
        glColor4f(particle.getParamCurrentValue(PARAM_RED),
                particle.getParamCurrentValue(PARAM_GREEN),
                particle.getParamCurrentValue(PARAM_BLUE),
                particle.getParamCurrentValue(PARAM_ALPHA));

        if (image == NULL)
        {
            glVertex2f(particle.position.x - sizeX,
                particle.position.y - sizeY);

            glVertex2f(particle.position.x + sizeX,
                particle.position.y - sizeY);

            glVertex2f(particle.position.x + sizeX,
                particle.position.y + sizeY);

            glVertex2f(particle.position.x - sizeX,
                particle.position.y + sizeY);

        }
        else if (!particle.getModel()->isEnabled(PARAM_ANGLE))
        {
            glTexCoord2f(0.0f,0.0f);
            glVertex2f(particle.position.x - sizeX,
                particle.position.y + sizeY);

            glTexCoord2f(1.0f,0.0f);
            glVertex2f(particle.position.x + sizeX,
                particle.position.y + sizeY);

            glTexCoord2f(1.0f,1.0f);
            glVertex2f(particle.position.x + sizeX,
                particle.position.y + sizeY);

            glTexCoord2f(0.0f,1.0f);
            glVertex2f(particle.position.x - sizeX,
                particle.position.y + sizeY);
        }
        else
        {
            float angleTexture = particle.getParamCurrentValue(PARAM_ANGLE);
            float cosA = cos(angleTexture);
            float sinA = sin(angleTexture);

            glTexCoord2f(0.0f,0.0f);
            glVertex2f(particle.position.x - cosA * sizeX + sinA * sizeY,
                particle.position.y - sinA * sizeX - cosA * sizeY);

            glTexCoord2f(1.0f,0.0f);
            glVertex2f(particle.position.x + cosA * sizeX + sinA * sizeY,
                particle.position.y + sinA * sizeX - cosA * sizeY);

            glTexCoord2f(1.0f,1.0f);
            glVertex2f(particle.position.x + cosA * sizeX - sinA * sizeY,
                particle.position.y + sinA * sizeX + cosA * sizeY);

            glTexCoord2f(0.0f,1.0f);
            glVertex2f(particle.position.x - cosA * sizeX - sinA * sizeY,
                particle.position.y - sinA * sizeX + cosA * sizeY);
        }


Und das ende ;)

C-/C++-Quelltext

1
glEnd();

Databyte

Alter Hase

  • »Databyte« ist der Autor dieses Themas

Beiträge: 1 040

Wohnort: Na zu Hause

Beruf: Student (KIT)

  • Private Nachricht senden

2

30.06.2009, 13:57

Ok hat sich erledigt ;)
war nen fehler wegen einer 0-Division :?: