Professional Documents
Culture Documents
Ni dung
1 Gii thiu Visual C++ 2 Chng trnh OpenGL u tin 3 OpenGL: Cc khi nim c bn
2
Li dch
Li lin kt
Li chy CT
Trnh g li (debugger)
Kt thc
Dch v lin kt
Cng c g ri
10
Ni dung
1 Gii thiu Visual C++ 2 Chng trnh OpenGL u tin 3 OpenGL: Cc khi nim c bn
11
Cc bc to mt n OpenGL u tin
1. M Visual C++ 2. Chn menu File/New/Project 3. Trong danh sch hin ra chn kiu project l Win32 Project v nhp tn n, v d CT1 ri bm OK, ri Next 4. Trong hp thoi Application Settings, chn Application Type l Windows Application ( c chn mc nh), trong Additional options chn Empty project, ri bm Finish
13
Minh ha 1
15
Minh ha 2
16
Minh ha 3
17
Sa i chng trnh
1. Thay i mu v tam gic 2. Thay i mu nn 3. Thay i ta im
18
void InitGraphics()
Khi to mi trng ha OpenGL
void ResizeGraphics()
Hm thay i kch thc vng v ph hp vi kch thc ca s
void DrawGraphics()
V hnh
20
SetupPixelFormat()
void SetupPixelFormat() { PIXELFORMATDESCRIPTOR pfd, *ppfd; int pixelformat;
ppfd = &pfd;
ppfd->nSize = sizeof(PIXELFORMATDESCRIPTOR); ppfd->nVersion = 1; ppfd->dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER; ppfd->dwLayerMask = PFD_MAIN_PLANE; ppfd->iPixelType = PFD_TYPE_COLORINDEX; ppfd->cColorBits = 16; ppfd->cDepthBits = 16; ppfd->cAccumBits = 0; ppfd->cStencilBits = 0;
InitGraphics()
void InitGraphics() { hDC = GetDC(hWnd); SetupPixelFormat(); hRC = wglCreateContext(hDC); wglMakeCurrent(hDC, hRC); glClearColor(0, 0, 0, 0.5); glClearDepth(1.0); glEnable(GL_DEPTH_TEST); }
22
Mu nn (0,0,0 en)
ResizeGraphics()
void ResizeGraphics() { // Get new window size RECT rect; int width, height; GLfloat aspect; GetClientRect(hWnd, &rect); width = rect.right; height = rect.bottom; aspect = (GLfloat)width / height; // Adjust graphics to window size glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0, aspect, 1.0, 100.0); glMatrixMode(GL_MODELVIEW); }
23
Hm thay i kch thc vng v ph hp vi kch thc ca s Ly kch thc ca s Thay i kch thc vng v
DrawGraphics()
void DrawGraphics() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
Mu (1,0,0) Ta
24
MainWndProc()
// Handle window events and messages LONG WINAPI MainWndProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_SIZE: ResizeGraphics(); break; case WM_CLOSE: DestroyWindow(hWnd); break; case WM_DESTROY: PostQuitMessage(0); break; // Default event handler default: return DefWindowProc (hWnd, uMsg, wParam, lParam); break; } return 1; }
Hm x l cc s kin xy ra vi ca s
Thay i kch thc ng Hy Mc nh
25
WinMain()
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { const LPCWSTR appname = TEXT("OpenGL Sample"); WNDCLASS wndclass; MSG msg; // Define the window class wndclass.style = 0; wndclass.lpfnWndProc = (WNDPROC)MainWndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon(hInstance, appname); wndclass.hCursor = LoadCursor(NULL,IDC_ARROW); wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wndclass.lpszMenuName = appname; wndclass.lpszClassName = appname; // Register the window class if (!RegisterClass(&wndclass)) return FALSE; // Create the window } wglDeleteContext(hRC); ReleaseDC(hWnd, hDC); } // Initialize OpenGL InitGraphics(); // Display the window ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); // Event loop while (1) { if (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE) == TRUE) { if (!GetMessage(&msg, NULL, 0, 0)) return TRUE; TranslateMessage(&msg); DispatchMessage(&msg); } DrawGraphics(); hWnd = CreateWindow(appname, appname, WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, NULL, NULL, hInstance, NULL); if (!hWnd) return FALSE;
26
Ni dung
1 Gii thiu Visual C++ 2 Chng trnh OpenGL u tin
Quan st (Viewing)
Mu sc Bng mu (shading) Php bin i quan st (Viewing Transformation) Php chiu nh sng
28
Cc i tng hnh hc c bn
OpenGL nh ngha nhng i tng hnh hc c bn l: im, on thng v a gic Mi i tng hnh hc c m t bng loi i tng v mt tp hp cc nh Lnh glVertex*() c dng ch nh mt nh. Du * c s dng v c mt s bin th ca lnh glVertex () V d glVertex3fv(): 3 l s tham s cn truyn vo ca lnh, f ch ra tham s kiu float, v cho bit tham s thuc loi vc-t (mng)
29
V im
v im, truyn tham s GL_POINTS cho lnh glBegin(). Kt thc v bng glEnd(). Mun thay i kch thc im nh, dng glPointSize() V d glBegin(GL_POINTS); glVertex2f(0.0, 0.0); glVertex2f(0.0, 3.0); glVertex2f(4.0, 3.0); glVertex2f(6.0, 1.5); glVertex2f(4.0, 0.0); glEnd();
30
V on thng
v on thng c th dng cc tham s sau cho lnh glBegin()
GL_LINES: V mt lot cc on thng tch bit GL_LINE_STRIP: V mt on thng t nh u tin cui cng. on thng c th giao nhau ty tin GL_LINE_LOOP: Tng t nh GL_STRIP, ngoi tr cnh cui c t ng thm vo ng a gic
31
V a gic
C mt s lnh v a gic: 3 nh (hnh tam gic, GL_TRIANGLES) v bn nh (t gic, GL_QUADS) v a gic tng qut (GL_POLYGON) V d glBegin(GL_POLYGON); glColor3f(1.0, 1.0, 0.0); // Mu vng glVertex2f(0.0, 0.0); glVertex2f(0.0, 3.0); glVertex2f(4.0, 3.0); glVertex2f(6.0, 1.5); glVertex2f(4.0, 0.0) glEnd();
32
Quan st (Viewing) - Mu sc
Khc vi v trn giy, trn my tnh ta cn xa v t mu nn trc khi v ra lnh v cc i tng. Trong OpenGL, lnh xa v t mu l glClearColor () Tham s ca lnh l b 4 mu thnh phn: , xanh l cy, xanh dng v m (Red,Green,Blue, Alpha blending RGBA). Gi tr mu thay i t 0.0 n 1.0 thit lp mt mu sc, s dng lnh glColor3f (). N c ba thng s nm gia 0.0 v 1.0 Gi tr mt s mu c bn
glColor3f(0.0, 0.0, 0.0); //black glColor3f(1.0, 0.0, 0.0); //red glColor3f(0.0, 1.0, 0.0); //green glColor3f(0.0, 1.0, 1.0); //cyan glColor3f(0.0, 0.0, 1.0); //blue glColor3f(1.0, 1.0, 0.0); //yellow glColor3f(1.0, 0.0, 1.0); //magenta glColor3f(1.0, 1.0, 1.0); //white
33
Bng mu (shading)
Trong OpenGL c th t mu cho mi nh ring r ca i tng. OpenGL s t ng ni suy ra c mu vng trung gian Php bng ny c gi l bng Gouraud
34
nh sng
Hiu ng nh sng l rt quan trng trong ha 3D v nu khng c nh sng mt i tng 3D s trng nh i tng 2D OpenGL cung cp hai loi ngun sng: hng v v tr Mt ngun sng hng c coi l nm cch i tng mt khong cch v hn (nh AS mt tri). V vy, cc tia nh sng c coi l song song khi tip cn cc i tng Ngc li, mt ngun sng v tr, gn hoc ngay trong cc cnh v c cc tia sng khng song song (nh AS n) Lnh glLightfv()c s dng t v tr ca nh sng, cho c AS hng v v tr. Cng c dng khi ch nh ngun sng c mu thuc loi nn, khuch tn, phn chiu, hay pht x
37
nh sng (tip)
Trong OpenGL c th to ng thi ti a tm ngun nh sng c tn ln lt GL_LIGHT0, GL_LIGHT1, to ra mt ngun nh sng, phi chn tn, v tr ngun sng v cc thng s mu sc v cht lng V d GLfloat light_diffuse[] = {1.0, 1.0, 1.0, 1.0}; GLfloat light_position[] = {1.0, 1.0, 1.0, 0.0}; glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); glLightfv(GL_LIGHT0, GL_POSITION, light_position); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0);
38
Cu hi?