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

Volker_Neff

Treue Seele

  • »Volker_Neff« ist der Autor dieses Themas

Beiträge: 249

Wohnort: Hamburg

  • Private Nachricht senden

1

19.05.2013, 14:03

[C++ + OpenGl] Dreieck zeichnen

Hallo zusammen,
ich sitze jetzt seit vielen stunden am Pc und schaffe es einfach nicht ein dreieck zu zeichen X( .
Zur zeit habe ich für testzwecke eine OpenGl Klasse, eine Game Klasse und die main. In der OpenGl Klasse erstelle ich ein Fenster und dann wolte ihc über die Game Klasse ein dreick zeichnen, doch es kommt keins. Woran kann das liegen ?( .

main.cpp

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
#include "OpenGl.h"
#include "Game.h"

int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR IpCmdLine, int iCmdShow)
{
    COpenGL OpenGl;
    CGame   Game;
    if (!OpenGl.opengl_createWindow (hInst, iCmdShow, 1280, 720))
    {
        return false;
    }
    OpenGl.opengl_setup ();
    OpenGl.opengl_reset ();
    while (true)
    {
        if (OpenGl.key_pressed ())
        {
            break;
        }
        else 
        {
            Game.GameMain ();
            SwapBuffers (OpenGl.getHDC ());
        }
    }
    return 0;
}


Game.h

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class CGame
{
public:
    CGame(void);
    ~CGame(void);
    void GameMain ();
    void setKeys ();
private:
    unsigned int    Level;
    bool            Create;
    bool            Delete;
    bool            Keys;
private:
    void Update ();
    void Print ();
};


Game.ccp

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
void CGame::GameMain ()
{
    switch (Level)
    {
    case LEVEL_01:
        {
            if (Create)
            {
                Create = false;
            }
            Update ();
            Print ();
            if (Delete)
            {
                Delete = false;
                Create = true;
            }
            break;
        }
    }
}

void CGame::Print ()
{
    glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3f (1.0f, 1.0f, 1.0f);
    glBegin (GL_TRIANGLES);
    glVertex3f ( 0.0f,  1.0f, -10.0f);
    glVertex3f (-1.0f,  0.0f, -10.0f);
    glVertex3f ( 1.0f,  0.0f, -10.0f);
    glEnd ();
}

Auch wenn ich aus der OpenGl Klasse printe sehe ich kein Dreieck woran liegt das?

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

2

19.05.2013, 16:05

Erstmal: lass bitte das C vor den Klassennamen weg, warum macht man sowas?
Dann: dein OpenGL ist hoffnungslos veraltet. Jetzt kommt evt. jemand der dir sagt du könntest es ja trotzdem verwenden. Aber bitte guck dir lieber direkt OpenGL 3+ an.
Hier mal eine kurze Einführung.
Und, da bin ich mir jetzt aber nicht sicher, warum OpenGL.h? Ich denke mal das ist die OpenGL implementierung von Windoof. Die unterstützt soweit ich weiß kein modernes OpenGL. Hol dir mal lieber gl3w.

Volker_Neff

Treue Seele

  • »Volker_Neff« ist der Autor dieses Themas

Beiträge: 249

Wohnort: Hamburg

  • Private Nachricht senden

3

19.05.2013, 16:13

OpenGL.h ist die Headerdatei meiner OpenGL Klasse. Ich habe mit dem uraltem OpenGl begonnen da die meisten Tutorials damit arbeiten. daz kommt das ich mit meinem 9. Klässler Englisch mit den meisten Englischen Erklärungen schlecht zurecht komme.
Trotz des Uralt openGl solte doch trotzdem ein Dreieck gezeichent werden.

Volker_Neff

Treue Seele

  • »Volker_Neff« ist der Autor dieses Themas

Beiträge: 249

Wohnort: Hamburg

  • Private Nachricht senden

4

19.05.2013, 20:10

Hat keiner ne Ahnung wo das Problem liegt? Ich bin echt aufgeschmissen.

Edit
Ich habe warscheinlich das Problem gefunden: Das Objekt hDC hat einen Parameter namens unuesd und dessen schpeicher kann nicht gelesen werden, wie kann ich das endern. Und die Funktion SwapBuffers (hDC) gibt false zurück, warscheinlich wegen des hDCs.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Volker_Neff« (20.05.2013, 12:58)


DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

5

20.05.2013, 12:57

Solltest du nicht eine Matrix für die Pipeline hochladen? Leider hab ich das nie mit dem uralt OpenGL gemacht...

LukasBanana

Alter Hase

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

6

20.05.2013, 15:16

Hast du den Viewport eingestellt ( glViewport )?
Hast du die Projektions Matrix eingestellt ( glMatrixMode(GL_PROJECTION); glLoadMatrix(...); )?
Hast du die ModelView Matrix initialisiert ( glMatrixMode(GL_MODELVIEW); glLoadIdentity(); )?

Volker_Neff

Treue Seele

  • »Volker_Neff« ist der Autor dieses Themas

Beiträge: 249

Wohnort: Hamburg

  • Private Nachricht senden

7

20.05.2013, 15:28

Ja habe ich alles gemacht und wird auhc alles aufgerufen, was mich wundert und was warscheinlich auch der schlüssel ist ist das der Speicher vom hDC nicht gelesen werden kann.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void COpenGL::opengl_reset ()
{
    if (iWidth == 0)
    {
        iWidth = 1;
    }
    if (iHeight == 0)
    {
        iHeight = 1;
    }

    glViewport (0, 0, this->iWidth, this->iHeight);
    glMatrixMode ( GL_PROJECTION);
    glLoadIdentity ();
    gluPerspective (45.0f, this->iWidth/this->iHeight, 1.0f, 100.f);
    glMatrixMode (GL_MODELVIEW);
    glLoadIdentity ();
}


Hat jemand noch ein gutes und einfachens Tutorial für einen blutigen OpenGL anfänger was nicht aus der Steinzeit ist?

Danke schon einmal für eure Antworten

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

8

20.05.2013, 15:45

Vielleicht hilft es erstmal ein Framework wie GLUT zu nutzen? Nur um nicht evt. Fehler im Windows Kontext zu haben.

Volker_Neff

Treue Seele

  • »Volker_Neff« ist der Autor dieses Themas

Beiträge: 249

Wohnort: Hamburg

  • Private Nachricht senden

9

20.05.2013, 15:58

Ja kann sein aber mein fenster wird korrekt aufgerufen. Und wo kriege ich dann ne gute Anleitung dafür her?

LukasBanana

Alter Hase

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

10

20.05.2013, 16:50

Wie viel Code hast du denn schon? Wenn's nicht zu viel ist könntest du den ja mal komplett posten.
Dann kann man dir vielleicht besser helfen.

Werbeanzeige