You are on page 1of 6

C bn v OpenGL.

OpenGL l g ?
c pht trin u tin bi Silicon Graphic, Inc., l mt giao din phn phn mm hng th tc theo chun cng nghip h tr ha 3 chiu. Cung cp khong 120 tc v v cc primitive trong nhiu mode khc nhau. Vi OpenGL, bn c th to ra nh 3 chiu c tnh v ng vi cht lng cao. L mt giao din phn mm c lp vi phn cng (hardware independent software interface) h tr cho lp trnh ha. lm c iu ny, OpenGL khng thc hin cc tc v thuc v h iu hnh cng nh khng nhn d liu nhp ca ngi dng (ngi dng giao tip vi OpenGL thng qua OpenGL API). N l lp trung gian gia ngi dng v phn cng. Ngha l n giao tip trc tip vi driver ca thit b ha. GLUT (pronounced like the glut in gluttony) is the OpenGL Utility Toolkit, a window system independent toolkit for writing OpenGL programs. It implements a simple windowing application programming interface (API) for OpenGL. GLUT makes it considerably easier to learn about and explore OpenGL programming. GLUT provides a portable API so you can write a single OpenGL program that works across all PC and workstation OS platforms. Download phin bn mi nht ca glut y http://user.xmission.com/~nate/glut.html Gii nn v t cc file vo ng v tr: - glut32.dll vo C:\WINDOWS\system\ - glut.lib vo C:\Program Files\Microsoft Visual Studio 9.0 \ VC \ lib - glut.h vo C:\Program Files\Microsoft Visual Studio 9.0 \ VC \ Include \ GL \ Tt nhin GLUT l th vin ph thuc OpenGL cho nn cn c gl.h, glu.h,glu32.dll, opengl32.dll, opengl32.lib, glu32.lib na. Ti ti y http://www.swiftless.com/tutorials/opengl/needed.zip. Gii nn v t vo cc v tr ging nh trn. Add dng sau y vo trc hm main() #pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) Xong, by gi tui s hng dn bn v mt hnh tam gic vi GLUT #include <GL/glut.h>

#pragma comment( linker, /subsystem:\windows\ /entry:\mainCRTStartup\" ) void renderScene(void) { glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_TRIANGLES); glVertex3f(-0.5,-0.5,0.0); glVertex3f(0.5,0.0,0.0); glVertex3f(0.0,0.5,0.0); glEnd(); glFlush(); } void main(int argc, char **argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA); glutInitWindowPosition(100,100); glutInitWindowSize(320,320); glutCreateWindow(Ve hinh tam giac!!!!); glutDisplayFunc(renderScene); glutMainLoop(); } Mt s quy c (convention) v tn hm OpenGL: Tn hm th vin OpenGL c hnh thc nh sau: Gl{tn hm}[{s tham s}{loi tham s}] V d: glClearColor(), glColor3f() Phn tn hm c vit hoa cho nhng ch ci ng u 1 t trong tn hm v t nhiu ni lean c chc nng ca hm. Phn s tham s v loi tham s xut hin ty theo hm. S tham s cho ta bit s lng tham s s a vo khi gi hm. Gii thch cc hm:

void glutInit(int *argc, char **argv); > //Khi ng GLUT , argc, argv l 2 i s dng lnh ca hm main

void glutInitWindowPosition(int x, int y); > //Khi to v tr bt u ca s, x l left of the screen, y l top of the screen, ni chung y l im bn tri, pha trn ca ca s, t y ta ko xung pha di, bn phi l c 1 ca s . n v ca x, y l pixel. void glutInitWindowSize(int width, int height); --> //Khi to kch thc ca s. vi chiu di v chiu rng, cng thm 1 im bt u mi ni trn na, bn tng tng ra c 1 ci ca s cha void glutInitDisplayMode(unsigned int mode) > //nh ngha mode hin th, ch ra mu ca mode v s + kiu ca buffer + GLUT_RGBA or GLUT_RGB : ca s mu RGBA, y l mode mc nh + GLUT_SINGLE : ca s buffer n + GLUT_DOUBLE : ca s buffer i + GLUT_DEPTH : ca s buffer su int glutCreateWindow(char *title); > to ca s c tiu title By gi ta cn to mt hm trnh din. Hm ny l do ngi dng to ra. void renderScene(void) { glClear(GL_COLOR_BUFFER_BIT); //xa mn hnh glBegin(GL_TRIANGLES); //v tam gic glVertex3f(-0.5,-0.5,0.0); glVertex3f(0.5,0.0,0.0); glVertex3f(0.0,0.5,0.0); glEnd(); //kt thc glFlush(); } void glutDisplayFunc(void (*func)(void)); > Hm ny bo cho GLUT bit phi trnh din theo hm no , i s ca n l mt con tr hm tr v kiu void

void glutMainLoop(void) > cui cng ta phi lp li hm main lin tc trnh din hnh tam gic. Ging nh ngi ta lm phim hot hnh , cc frame ni tip nhau trn mt mn nh. Hic, my ci ny dch t english sang, ko hiu lm, c tm bit vy .

THAM KHO THM


Cc lnh glClearColor(), glClear(),glFush() l nhng lnh c bn ca Opengl.glClearColor() c nhim v chn mu xo window, bn d dng nhn ra l n c 4 tham s, 4 tham s l RGBA( red green blue alpha).Khng ging vi hm RGB() trong Win32 API , 4 tham s ny c gi tr trong khong 0.0f n 1.0f(kiu float). Cc gi tr R,G,B trong OpenGL th >=0.0 (khng c) v <=1.0 ( sng cc i). Ba tham s u l mu xanh l cy v xanh da tri, cn tham s th 4 l sng ti ca window.By gi hy thay i cc gi tr ca mu xem th!Hm glClear() mi thc s xo window, n c nhng hng s xc nh.C trng hp c nhng hm cha c chy n khi kt thc chng trnh, trnh trng hp ny hm glFlush()c gi, n s thc hin tt c cc hm cha c chy v kt thc chng trnh. Dng glClear*() nh mu xa cho cc buffer. Sau glClear(GLbitfied mask) xa buffer tng ng vi mask Tham s param ca hm glClear() c th nhn t 1 n 4 gi tr sau: Buffer Name Color buffer GL_COLOR_BUFFER_BIT Depth buffer GL_DEPTH_BUFFER_BIT Accumulation buffer GL_ACCUM_BUFFER_BIT Stencil buffer GL_STENCIL_BUFFER_BIT Mi gi tr trn ch n mt buffer tng ng nh trn bng. Cc gi tr c th kt hp thng qua ton t | (bitwise-OR). Khi mun xa nhiu b m ng thi, nn dng bitwise-OR hn l gi tch ring tng lnh glClear() mt tham s v hm glClear() c th thc s xa ng thi nhiu buffer (chc nng ny ty thuc phn cng). nh mu xa cho mi buffer, ta dng cc hm glClear*() nh sau: glClearColor(), glClearDepth(), glClearAccum(), glClearStencil(). Buc vic v hon tt

i vi cc ng dng ha chy qua mng, trong client chy phn chng trnh chnh v hin th kt qu n server, thng th client s gom nhiu lnh v vo mt packet, sau mi gi n server. Nhng lm sao client bit c khi no th nh trn server v xong v gi tip packet khc? Do n s i n khi no packet y mi gi tip. Nhng packet c th khng bao gi y v vic v bn client hon tt v nh vy server khng thy c trn vein kt qu v OpenGL cung cp hm glFlush() chng ta gii quyt vn ny. Lnh ny buc client gi packet ngay c khi packet cha y. Lnh ny khng i cho vic v hon tt, n buc vic v phi bt u thc hin v do m bo tt c cc lnh trc thc hin trong mt thi gian gii hn. Nu my chy local th ta khng cn dng lnh ny. Mt lnh khc cng gn ging l lnh glFinish(), n thc hin chc nng ging glFlush() nhng n i phn hi t phn cng ang v hoc mng khng nh vic v hon tt. Lnh ny hu dng khi ta mun ng b ha cc phn v. V d ta mun mt phn no v hon tt xong th mi thc hin cc phn khc. Nhng lm dng lnh ny s lm chm chng trnh v n phi i phn hi. Cu trc vertex Trong OpenGL, mi i tng hnh hc u c m t c bn t cc vertex. Cu trc ny bao gm b 4 s thc ch ta trong khng gian. ch nh mt vertex, ta dng: glVertex{234}{sifd}[v](TYPEcoords); V sao c s 4? V OpenGL dng ta tng i theo mt s th t. Khi ta ghi ta dng (x,y,z,w) th s thc l ta 3 chiu (x/w,y/w,z/w). Mc nh w=1.0, z=0. V d: glVertex2s(2, 3); // khai bo vertex c ta (2,3,0)

glVertex3d(0.0, 0.0, 3.1415926535898); // to nh tham s glVertex4f(2.3, 1.0, -2.2, 2.0); // ta (1.15,0.5,1.1)

GLdouble dvect[3] = {5.0, 9.0, 1992.0}; //khai bo 1 vecteor glVertex3dv(dvect); //khai bo vertex thng qua vector nu trn

Trong mt s my tnh, vic truyn tham s bng vector s hiu qu hn truyn b 3 s ring l (ty thuc phn cng). to mt i tng hnh hc t cc vertex, ta bao khi khai bo vertex bng hai hm glBegin(param) v glEnd(). Tham s param a vo cho hm glBegin() s gip OpenGL quyt nh v g t cc vertex khai bo bn trong.

V d:

glBegin(GL_POLYGON); glVertex2f(0.0, 0.0); glVertex2f(0.0, 1.0); glVertex2f(0.5, 1.0); glVertex2f(1.0, 0.5); glVertex2f(0.5, 0.0); glEnd(); Cc tham s c th a vo hm glBegin(Glenum mode) Gi tr ngha GL_POINTS Tng vertex c v ring GL_LINES Mi cp vertex c coi nh 2 u mt on thng GL_POLYGON Cc vertex c xem nh bin ca mt a gic li GL_TRIANGLES B 3 vertex c xem cc nh mt tam gic (khng lp) GL_QUADS B 4 vertex c xem nh 4 nh 1 a gic (khng lp). GL_LINE_STRIP Mt lot cc on c ni vi nhau (c lp) GL_LINE_LOOP Nh trn nhng vertex u v cui c ni vi nhau (lp vng) GL_TRIANGLE_STRIP B 3 vertex xem nh cc nh tam gic (c lp) GL_TRIANGLE_FAN Vertex 0 l nh chung kt hp cp nh bt k to tam gic

You might also like