You are on page 1of 39

Bi 2 GII THIU VISUAL C++ V LP TRNH HA 3D VI OPENGL

Ni dung
1 Gii thiu Visual C++ 2 Chng trnh OpenGL u tin 3 OpenGL: Cc khi nim c bn
2

1 GII THIU VISUAL C++

Gii thiu Visual C++


Microsoft Visual C++ (MSVC) l mt Mi trng pht trin tch hp (IDE) cho cc ngn ng lp trnh C&C++ C cc cng c cho pht trin v g li m ngun C/C++ MFC l mt th vin lp trnh giao din ha cho cc ng dng chy trn Windows Visual C++ nm trong b Visual Studio, trong bao gm cng c pht trin cho Visual Basic, Visual J#, Visual C#, Visual Web Developer
4

Cc phin bn ca Visual C++


Visual C++ 1.0, l phin bn u tin ca Visual C++, ra i nm 1992. Visual C++ 1.5, h tr thm OLE 2.0 v ODBC cho MFC Visual C++ 2.0, l phin bn u tin ch dnh ring cho 32-bit Visual C++ 4.0, c thit k cho Windows 95, cng nh Windows NT Visual C++ 6.0, MFC 6.0, ra i 1998, v ang c s dng rng ri cho cc project ln v nh () Visual C++ .NET 2002 (7.0) c mt giao din ngi dng mi. y cng chnh l nguyn nhn ti sao Visual C++ 6.0 hin vn cn c s dng rng ri Visual C++ .NET 2003 (7.1) l mt phin bn nng cp quan trng, h tr chun C++ ca ISO tt hn rt nhiu so vi cc phin bn trc Visual C++ 2008 (9.0) h tr cc ng dng Uncode d dng (nht l cho ting Vit) Visual C++ 2010 (10.0) chnh thc h tr ISO C++0x

Ti sao chun ngn ng lp trnh quan trng


Ngn ng C c chun ha bng ISO C99 hay ANSI C (ISO/IEC 9899:1999) Ngn ng C++ c chun ha bng ISO C++98 (ISO/IEC 14882:1998), C++11 (ISO/IEC 14882:2011) Chng trnh trong mt mi trng chuyn sang mi trng khc khng cn sa i m bo s u t v n nh cho sn phn mm Trnh dch Visual C++ 6.0 khng tng thch vi rt nhiu c im ca C++ chun. Chng trnh vit trn Visual C++ 6.0 mang sang Visual C++ mi hn phi sa i nhiu Visual C++ .NET 2003 l phin bn C++ u tin ca Microsoft h tr tt C++ chun Ging nh Internet Explorer cn tr s pht trin ca Internet, Visual C++ 6.0 cn tr s pht trin lp trnh C++
6

XIN LI, Y KHNG C CH CHO VISUAL C++ 6.0.


KHNG GII P
KHNG KHUYN KHCH

Bt u Cng c son tho (editor)

Quy trnh pht trin mt chng trnh C/C++

Vit chng trnh

Dch chng trnh

Trnh bin dch (compiler)

Li dch

Lin kt th vin & module khc

Trnh lin kt (linker)

Li lin kt

Chy chng trnh

Li chy CT

Trnh g li (debugger)

Kt thc

Minh ha quy trnh pht trin

Mi trng pht trin tch hp (IDE)


Chy chng trnh Qun l n (tp tin),thit k giao din

Cng c dch & lin kt

Son tho chng trnh Thng bo li thn thin

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

2 Chng trnh OpenGL u tin


Cc bc thc hin Chy chng trnh Xem xt cc phn ca chng trnh
12

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

Cc bc to mt n OpenGL u tin (tip)


5. Tm tp tin opengl.cpp (download t http://db.tt/wr1sr3e) v gp th vo danh sch tp tin ca project 6. Tm cc tp tin opengl32.lib v glu32.lib (th mc mc nh l C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib) ri gp th vo danh sch tp tin ca project 7. Xy dng tp tin chy .exe (bm nt lnh Build hoc phm F7) 8. Chy chng trnh (Bm Ctrl+F5)
14

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

Cu trc ca mt chng trnh ha OpenGL


void SetupPixelFormat()
Khi to nh dng nh

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

LONG WINAPI MainWndProc ()


Hm x l cc s kin xy ra vi ca s

int WINAPI WinMain ()


Hm u vo chng trnh Windows 19

Ch th bin dch v bin tng th


#include <windows.h> #include <gl/gl.h> #include <gl/glu.h> HWND hWnd; HDC hDC; HGLRC hRC; Cho cc hm th vin ca Windows v th vin ha OpenGL Bin cho ca s Bin cho vng v (DC) Bin vng v OpenGL

20

SetupPixelFormat()
void SetupPixelFormat() { PIXELFORMATDESCRIPTOR pfd, *ppfd; int pixelformat;

Khi to nh dng im nh ca vng v

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;

pixelformat = ChoosePixelFormat(hDC, ppfd); SetPixelFormat(hDC, pixelformat, ppfd);


} 21

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

Khi to mi trng ha OpenGL

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);

V hnh tam gic

// Set location in front of camera glLoadIdentity(); glTranslated(0, 0, -10);


// Draw a triangle glBegin(GL_TRIANGLES); glColor3d(1, 0, 0); glVertex3d(-2, 2, 0); glVertex3d(2, 2, 0); glVertex3d(2, -2, 0); glEnd(); // Show the new scene SwapBuffers(hDC); }

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

3 OpenGL: Cc khi nim c bn


27

3 OpenGL: Cc khi nim c bn


Cc i tng hnh hc c bn
im on thng a gic

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

Php bin i quan st (Viewing Transformation)


thay i hnh nh ca mt i tng, cn hay i v tr ca ui tng hoc ca ngi quan st. Trong ha my tnh, mt camera c trng cho ngi quan st reset li gc quan st ca camera, dng lnh glLoadIdentity() (t ma trn chuyn i v ma trn n v) Dng lnh gluLookAt() t v tr ca camera (ngi quan st) v hng nhn V d: lnh gluLookAt( 0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0) t camera ti im (0.0, 0.0, 5.0), nhn v im (0.0, 0.0, 0.0) v t vc-t hng ln ca camera l (0,1,0) (tc l nm ngang)
35

Php chiu (projection)


Khi v trong OpenGL lun s dng kch thc tht ca i tng. Th hin ca i tng c tnh ton ty thuc vo v tr camera v phng php chiu hnh C hai phng php chiu hnh chnh: trc o (orthographic) v phi cnh (perspective) t phng php chiu trc o, s dng lnh glOrtho(), vi phi cnh dng lnh glFrustum()
36

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?

You might also like