opengl là gì - nhuy.infonhuy.info/my-passion/info-tech/tuts-a-tips/109-tim-hieu-ve-opengl.pdf ·...

Download OpenGL là gì - nhuy.infonhuy.info/my-passion/info-tech/tuts-a-tips/109-tim-hieu-ve-opengl.pdf · Các lệnh glClearColor(), ... Trong OpenGL, mọi đối tượng hình học

If you can't read please download the document

Upload: dangbao

Post on 05-Feb-2018

227 views

Category:

Documents


5 download

TRANSCRIPT

  • Tm hiu v OpenGLTh ba, 15 Thng 5 2012 00:51

    OpenGL l g ?

    c pht trin u tin bi Silicon Graphic, Inc., l mt giao din phn phn mm hng thtc theo chun cng nghip h tr ha 3 chiu. Cung cp khong 120 tc v v ccprimitive trong nhiu mode khc nhau. Vi OpenGL, bn c th to ra nh 3 chiu c tnh vng vi cht lng cao.

    L mt giao din phn mm c lp vi phn cng (hardware independent softwareinterface) h tr cho lp trnh ha. lm c iu ny, OpenGL khng thc hin cc tcv thuc v h iu hnh cng nh khng nhn d liu nhp ca ngi dng (ngi dng giaotip 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 systemindependent toolkit for writing OpenGL programs. It implements a simple windowing applicationprogramming interface (API) for OpenGL. GLUT makes it considerably easier to learn aboutand explore OpenGL programming. GLUT provides a portable API so you can write a singleOpenGL program that works across all PC and workstation OS platforms.

    Download phin bn mi nht ca glut y. Gii nn v t cc file vo ng v tr:

    1 / 7

    http://www.xmission.com/%7Enate/glut/glut-3.7.6-bin.zip

  • Tm hiu v OpenGLTh ba, 15 Thng 5 2012 00:51

    - glut32.dll vo C:WINDOWSsystem - glut.lib vo C:Program FilesMicrosoft Visual Studio 9.0 VC lib - glut.h vo C:Program FilesMicrosoft 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 . Gii nn v t vo cc v tr ging nhtrn.

    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 #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:

    2 / 7

    http://www.swiftless.com/tutorials/opengl/needed.zip

  • Tm hiu v OpenGLTh ba, 15 Thng 5 2012 00:51

    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 nilean c chc nng ca hm. Phn s tham s v loi tham s xut hin ty theo hm. Stham 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 lnhca hm main

    void glutInitWindowPosition(int x, int y); > //Khi to v tr bt u ca s, x l left of thescreen, y l top of the screen, ni chung y l im bn tri, pha trn ca ca s, t y tako 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 div chiu rng, cng thm 1 im bt u mi ni trn na, bn tng tng ra c 1 cica s cha

    void glutInitDisplayMode(unsigned int mode) > //nh ngha mode hin th, ch ra muca 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

    3 / 7

  • Tm hiu v OpenGLTh ba, 15 Thng 5 2012 00:51

    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 dintheo 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 hnhtam gic. Ging nh ngi ta lm phim hot hnh , cc frame ni tip nhau trn mt mnnh.

    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() cnhim v chn mu xo window, bn d dng nhn ra l n c 4 tham s, 4 tham s lRGBA( red green blue alpha).Khng ging vi hm RGB() trong Win32 API , 4 tham s ny cgi tr trong khong 0.0f n 1.0f(kiu float). Cc gi tr R,G,B trong OpenGL th >=0.0 (khng c) v

  • Tm hiu v OpenGLTh ba, 15 Thng 5 2012 00:51

    nhng hng s xc nh.C trng hp c nhng hm cha c chy n khi kt thcchng trnh, trnh trng hp ny hm glFlush()c gi, n s thc hin tt c cc hmcha 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 thngqua ton t | (bitwise-OR). Khi mun xa nhiu b m ng thi, nn dng bitwise-OR hn lgi 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 vhin th kt qu n server, thng th client s gom nhiu lnh v vo mt packet, sau migi 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 thkhng bao gi y v vic v bn client hon tt v nh vy server khng thy c trnvein kt qu v OpenGL cung cp hm glFlush() chng ta gii quyt vn ny. Lnh nybuc 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 hintrong 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

    5 / 7

  • Tm hiu v OpenGLTh ba, 15 Thng 5 2012 00:51

    n i phn hi t phn cng ang v hoc mng khng nh vic v hon tt. Lnhny hu dng khi ta mun ng b ha cc phn v. V d ta mun mt phn no v hontt xong th mi thc hin cc phn khc. Nhng lm dng lnh ny s lm chm chng trnhv 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 nybao 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 hmglBegin(param) v glEnd(). Tham s param a vo cho hm glBegin() s gip OpenGL quytnh v g t cc vertex khai bo bn trong.

    V d:

    6 / 7

  • Tm hiu v OpenGLTh ba, 15 Thng 5 2012 00:51

    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

    Su tm & chnh sa

    7 / 7