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

![]() |
Lord Stweccys |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. ![]() |
||
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ok, OpenGL funzt in COde::Blocks auch besser als directX ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@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 ![]() |
||
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Joa der Code zeigt ein sich drehendes Dreieck - in versch. Farben ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Text entfernt | ||
![]() |
Lord Stweccys |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
vielen dank euch beiden ![]() ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
http://www.opengl.org/sdk/docs/man/ | ||
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Text entfernt | ||
![]() |
hamZtaAdministrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. |
CO2ehemals "SirMO" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group