Ik ben voor een project aan het prutsen met OpenGL 3.1, maar ik loop al meteen bij het initialiseren van OpenGL (of Win32) vast
Het doel van de onderstaande code is vrij standaard: een window aanmaken en er een driehoek in tekenen.
Vergeef me voor het ontbreken van comments.. De code was als test bedoeld
Bij het compilen en runnen in Visual Studio 2008 Professional (waarbij overigens geen errors optreden) verschijnt er wel een window op het scherm met de juiste eigenschappen, maar de OpenGL code lijkt niets te doen. Ik ben minstens 10 keer iedere regel code nagegaan tijdens het debuggen en alles lijkt te functioneren..
Ik ben hier inmiddels al twee dagen mee bezig en heb zo onderhand 5 pagina's Google pagina's aan OpenGL tutorials doorgelezen, maar nog steeds kan ik geen fout ontdekken.. Verder lijkt mijn Win32 code ook niet helemaal te kloppen, aangezien er bij het runnen van de code af en toe strepen in andere windows komen.. Voorbeeld hiervan: http://i29.tinypic.com/s2xfs5.jpg.
Ik hoop dat jullie me kunnen helpen, want ik (als C++ beginner) ben echt ten einde raad
C++:
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
| #include <windows.h> #include <GL/gl.h> #include <GL/glu.h> LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { static HGLRC hRC; static HDC hDC; static int pixelFormat; switch(message) { case WM_CREATE: hDC = ::GetDC(hWnd); PIXELFORMATDESCRIPTOR pfd; ::ZeroMemory(&pfd, sizeof(PIXELFORMATDESCRIPTOR)); pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR); pfd.nVersion = 1; pfd.dwFlags = PFD_SUPPORT_OPENGL | PFD_DRAW_TO_WINDOW | PFD_DOUBLEBUFFER; pfd.iPixelType = PFD_TYPE_RGBA; pfd.cColorBits = 24; pfd.cDepthBits = 32; pfd.iLayerType = PFD_MAIN_PLANE; pixelFormat = ::ChoosePixelFormat(hDC, &pfd); ::SetPixelFormat(hDC, pixelFormat, &pfd); hRC = ::wglCreateContext(hDC); ::wglMakeCurrent(hDC, hRC); ::glEnable(GL_DEPTH_TEST); ::glClearColor(1.0f, 1.0f, 1.0f, 1.0f); break; case WM_PAINT: ::glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); ::glLoadIdentity(); ::glBegin(GL_TRIANGLES); ::glColor3f(0.0f, 0.0f, 0.0f); ::glVertex3f(0.0f, 0.0f, 0.0f); ::glVertex3f(1.0f, 0.0f, 0.0f); ::glVertex3f(0.0f, 1.0f, 0.0f); ::glEnd(); break; case WM_CLOSE: case WM_DESTROY: ::wglMakeCurrent(NULL, NULL); ::wglDeleteContext(hRC); ::PostQuitMessage(0); break; } return ::DefWindowProc(hWnd, message, wParam, lParam); } int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { HWND hWnd; WNDCLASSEX wc; ::ZeroMemory(&wc, sizeof(WNDCLASSEX)); wc.cbSize = sizeof(WNDCLASSEX); wc.style = CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc = (WNDPROC)WndProc; wc.hInstance = hInstance; wc.hCursor = ::LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)COLOR_WINDOW; wc.lpszClassName = "GLClass"; ::RegisterClassEx(&wc); hWnd = ::CreateWindowEx(NULL, "GLClass", "OpenGL Test", WS_OVERLAPPEDWINDOW, 0, 0, 800, 600, NULL, NULL, hInstance, NULL); ::ShowWindow(hWnd, nShowCmd); ::UpdateWindow(hWnd); MSG msg; ::PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE); while (msg.message != WM_QUIT) { if (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { ::TranslateMessage(&msg); ::DispatchMessage(&msg); } // game loop } return 0; } |
Vergeef me voor het ontbreken van comments.. De code was als test bedoeld
Bij het compilen en runnen in Visual Studio 2008 Professional (waarbij overigens geen errors optreden) verschijnt er wel een window op het scherm met de juiste eigenschappen, maar de OpenGL code lijkt niets te doen. Ik ben minstens 10 keer iedere regel code nagegaan tijdens het debuggen en alles lijkt te functioneren..
Ik ben hier inmiddels al twee dagen mee bezig en heb zo onderhand 5 pagina's Google pagina's aan OpenGL tutorials doorgelezen, maar nog steeds kan ik geen fout ontdekken.. Verder lijkt mijn Win32 code ook niet helemaal te kloppen, aangezien er bij het runnen van de code af en toe strepen in andere windows komen.. Voorbeeld hiervan: http://i29.tinypic.com/s2xfs5.jpg.
Ik hoop dat jullie me kunnen helpen, want ik (als C++ beginner) ben echt ten einde raad

Ehhh wat?