C++ - 2D-Engine selber schreiben - Tutorial?

Übersicht Sonstiges Smalltalk

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

Lord Stweccys

BeitragDi, Sep 14, 2010 13:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich kenne mich mit DirectX nicht aus, aber ich würde dir auf jeden Fall OpenGl empfehlen.
Es ist schön einfach, es gibt ne Menge nützlicher Befehle (dies wahrscheinlich auch in DirectX geben wird).
Außerdem ist ein wichtiger Punkt, dass es plattformunabhängig ist, was es zu einem starken Rivalen für DirectX macht.
Auch ist die Hardware jeder heutigen Grafikkarte OpenGl-Fähig,
während man früher teure OpenGl-Hardware kaufen musste.

Ein Nachteil, wie ich finde, ist allerdings, dass es relativ kompliziert ist, OpenGL einzubinden.
(Nach dem, was ich in meinem OpenGl-Buch gelesen habe)
Was aber auch kein größeres Problem darstellen sollte, schließlich gibt es eine große Community
und sicher ein paar einfachere Einbettungsvarianten. Very Happy
 

CO2

ehemals "SirMO"

BeitragDi, Sep 14, 2010 14:08
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, OpenGL funzt in COde::Blocks auch besser als directX Very Happy... Thx. Ich werd mich dann mal daran versuchen...
Eine Frage noch:
Ich habe jetzt das Projekt gestartet und folgenden Code erhalten:
Code: [AUSKLAPPEN]
#include <windows.h>
#include <gl/gl.h>

LRESULT CALLBACK WindowProc(HWND, UINT, WPARAM, LPARAM);
void EnableOpenGL(HWND hwnd, HDC*, HGLRC*);
void DisableOpenGL(HWND, HDC, HGLRC);


int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine,
                   int nCmdShow)
{
    WNDCLASSEX wcex;
    HWND hwnd;
    HDC hDC;
    HGLRC hRC;
    MSG msg;
    BOOL bQuit = FALSE;
    float theta = 0.0f;

    /* register window class */
    wcex.cbSize = sizeof(WNDCLASSEX);
    wcex.style = CS_OWNDC;
    wcex.lpfnWndProc = WindowProc;
    wcex.cbClsExtra = 0;
    wcex.cbWndExtra = 0;
    wcex.hInstance = hInstance;
    wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
    wcex.lpszMenuName = NULL;
    wcex.lpszClassName = "GLSample";
    wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION);;


    if (!RegisterClassEx(&wcex))
        return 0;

    /* create main window */
    hwnd = CreateWindowEx(0,
                          "GLSample",
                          "OpenGL Sample",
                          WS_OVERLAPPEDWINDOW,
                          CW_USEDEFAULT,
                          CW_USEDEFAULT,
                          256,
                          256,
                          NULL,
                          NULL,
                          hInstance,
                          NULL);

    ShowWindow(hwnd, nCmdShow);

    /* enable OpenGL for the window */
    EnableOpenGL(hwnd, &hDC, &hRC);

    /* program main loop */
    while (!bQuit)
    {
        /* check for messages */
        if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
        {
            /* handle or dispatch messages */
            if (msg.message == WM_QUIT)
            {
                bQuit = TRUE;
            }
            else
            {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
        }
        else
        {
            /* OpenGL animation code goes here */

            glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
            glClear(GL_COLOR_BUFFER_BIT);

            glPushMatrix();
            glRotatef(theta, 0.0f, 0.0f, 1.0f);

            glBegin(GL_TRIANGLES);

                glColor3f(1.0f, 0.0f, 0.0f);   glVertex2f(0.0f,   1.0f);
                glColor3f(0.0f, 1.0f, 0.0f);   glVertex2f(0.87f,  -0.5f);
                glColor3f(0.0f, 0.0f, 1.0f);   glVertex2f(-0.87f, -0.5f);

            glEnd();

            glPopMatrix();

            SwapBuffers(hDC);

            theta += 1.0f;
            Sleep (1);
        }
    }

    /* shutdown OpenGL */
    DisableOpenGL(hwnd, hDC, hRC);

    /* destroy the window explicitly */
    DestroyWindow(hwnd);

    return msg.wParam;
}

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
        case WM_CLOSE:
            PostQuitMessage(0);
        break;

        case WM_DESTROY:
            return 0;

        case WM_KEYDOWN:
        {
            switch (wParam)
            {
                case VK_ESCAPE:
                    PostQuitMessage(0);
                break;
            }
        }
        break;

        default:
            return DefWindowProc(hwnd, uMsg, wParam, lParam);
    }

    return 0;
}

void EnableOpenGL(HWND hwnd, HDC* hDC, HGLRC* hRC)
{
    PIXELFORMATDESCRIPTOR pfd;

    int iFormat;

    /* get the device context (DC) */
    *hDC = GetDC(hwnd);

    /* set the pixel format for the DC */
    ZeroMemory(&pfd, sizeof(pfd));

    pfd.nSize = sizeof(pfd);
    pfd.nVersion = 1;
    pfd.dwFlags = PFD_DRAW_TO_WINDOW |
                  PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
    pfd.iPixelType = PFD_TYPE_RGBA;
    pfd.cColorBits = 24;
    pfd.cDepthBits = 16;
    pfd.iLayerType = PFD_MAIN_PLANE;

    iFormat = ChoosePixelFormat(*hDC, &pfd);

    SetPixelFormat(*hDC, iFormat, &pfd);

    /* create and enable the render context (RC) */
    *hRC = wglCreateContext(*hDC);

    wglMakeCurrent(*hDC, *hRC);
}

void DisableOpenGL (HWND hwnd, HDC hDC, HGLRC hRC)
{
    wglMakeCurrent(NULL, NULL);
    wglDeleteContext(hRC);
    ReleaseDC(hwnd, hDC);
}


Da ist aber noch nicht die 2D oder 3D-Engine enthalten, oder? Muss ich die also selbst programmieren?
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Goodjee

BeitragDi, Sep 14, 2010 14:18
Antworten mit Zitat
Benutzer-Profile anzeigen
natürlich
opengl ist keine engine
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/

Lord Stweccys

BeitragDi, Sep 14, 2010 14:43
Antworten mit Zitat
Benutzer-Profile anzeigen
@SirMO: Sei froh, dass es bei dir so wenig Code ist. Ich hab grad nachgeschaut und gesehen,
dass in meinem OpenGl-Lernbuch 52 Seiten allein damit verbracuth wurden, wie man ein neues
OpenGl-Projekt in C++ anfängt Shocked
 

CO2

ehemals "SirMO"

BeitragDi, Sep 14, 2010 15:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Joa der Code zeigt ein sich drehendes Dreieck - in versch. Farben Very Happy
Gibt es in OpenGL eine liste mit grundbefehlen?
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti
 

Sterbendes Lüftlein

BeitragDi, Sep 14, 2010 15:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Text entfernt

Lord Stweccys

BeitragDi, Sep 14, 2010 16:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Das war die Dokumentation zu 2.1, es gibt aber auch für die anderen OpenGL-Versionen Dokus.
Die aktuellste findest du hier: http://www.opengl.org/sdk/docs/man4/
Ich wünsche noch freudiges Programmieren Very Happy
 

CO2

ehemals "SirMO"

BeitragDi, Sep 14, 2010 16:07
Antworten mit Zitat
Benutzer-Profile anzeigen
vielen dank euch beiden Wink (natürlich auch allen anderen die mir beim aufklären des problem behilflich waren Very Happy)

Ich werd mich mal an dem ganzen zeug probieren.
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

The Shark

BeitragDi, Sep 14, 2010 16:14
Antworten mit Zitat
Benutzer-Profile anzeigen
http://www.opengl.org/sdk/docs/man/
 

CO2

ehemals "SirMO"

BeitragDi, Sep 14, 2010 19:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Mal ne frage zu Allegro:
Wie installiert man das?
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti
 

Sterbendes Lüftlein

BeitragDi, Sep 14, 2010 20:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Text entfernt

hamZta

Administrator

BeitragMi, Sep 15, 2010 1:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay Sirmo, ich denke es wird Zeit für dich mal eine Suchmaschine zu benutzen. Und versuch nicht, mir zu erzählen du hättest nicht rausgefunden wie man Allegro installiert bzw. verwendet. Wir sind hier nicht deine Angestellten die für dich suchen sollen.

Sollte dieser Thread hier weiterhin nur aus informationslosen Einzeilern bestehen werde ich ihn trashen.

hamZta
Blog.
 

CO2

ehemals "SirMO"

BeitragMi, Sep 15, 2010 14:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich HABE aber google benutzt, dass ist dabei herausgekommen: http://www.angelfire.com/linux/woeba/... Nur da waren noch tausend andere Progs da die ich hätte herunterladen müsse, und es in diesem Forum welche gibt, die dich damit anscheinen besser auskennen, die können dann doch eben mal schreiben wie sie es gemacht haben...

Außerdem habe ich nie von Angestellten geredet, noch habe ich soetwas angedeutet! Ich hatte lediglich ein paar fragen die ich gerne beantwortet gehabt hätte, weil sich eben hier (wie oben schon geschrieben) member befinden die sich damit wie gesagt asukennen.

Abgesehen davon:
Vielen dank an Totensturm und alle anderen die zur Lösung meines Problems beigetragen haben!
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht Sonstiges Smalltalk

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group