You are on page 1of 45

CHNG 1:OPENGL ES

1.1 Gii thiu v OpenGL ES OpenGL ES l mt sn phm min ph bao gm cc hm API cho php to cc ng dng 2D, 3D trn cc ng dng nhng bao gm cc thit b cm tay. N c nh ngha nh l mt tp con ca openGL, to ra tnh linh hot, mnh m trn giao din cp thp gia cc phn mm v ha. OpenGL ES 1.1 nhn mnh v tc phn cng ca cc hm API, trong khi OpenGL ES 1.0 ch tp trung vo cc phn mm cho php trin khai. OpenGL ES 1.1 hon ton tng thch vi bn OpenGL ES 1.0 v n c th d dang thm cc API gia hai phin bn Cc c im ca OpenGL ES c pht trin bi nhm Khronos 1.2 Nhp d liu t phm (Keyboard Input) u tin bn phi xy dng mt chc nng x l mi d liu c a vo t bn phm,chc nng ny phi chp nhn mt s cc tham s nht nh Tham s th nht l bin UGWindow Tham s th hai phi l mt bin nguyn (interger), i din cho phm c bm Tham s th ba v th t cng l hai bin nguyn (interger), xc nh gi tr x, y ca con tr thit b khi c n.

void keyboard(UGWindow uwin, int key, int x, int y) { // kim tra nt c bm switch(key) { case 'q' : exit(0); break; // Cc phm c sn c lit k bng di

// thot khi chng trnh nu n phm mi tn i ln case UG_KEY_UP : exit(0); break; } }

1.1 Dng (Rendering) Cc bc khi to v thit lp OpenGL ES, khi v trn mn hnh OpenGL ES s dng k thut ca mt b m kp. Khi v chng ta v trn b nh m. Sau khi c c tt c cc thng tin ca vic v, n s trao i gia cc b nh m v bt u v trn b nh m khc. iu ny ngn chn nh hng ca vic chp mn hnh bi hng s xa mn hnh v v hnh khc trn mt b nh m. Trong hm Init(), chng ta s dng mt li gi glClearColor, n c s dng xc nh mu sc cho mn hnh hin th, n bao gm 4 tham s, cc tham s ny i din cho h mu RGBA v c gi tr trong khong t 0 n 1. Ba tham s u l mu xanh l cy v xanh da tri, cn tham s th 4 l sng ti ca window on code t mu nn en cho mn hnh hin th Demo:
void init() { glClearColor(0.0f, 0.0f, 0.0f, 0.0f); Hm display dng hin thi ra mn hnh }

void display(UGWindow uwin) { // 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 glClear(GL_COLOR_BUFFER_BIT); // 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. glFlush(); //lu thng tin sau khi v trn khung, chng trao i gia cc b nh m v bt u v trn . Chc nng ugSwapBuffers c s dng thc hin iu ny ugSwapBuffers(uwin); }

1.2 Php chiu trc giao (Orthographic Projection) C hai cch hin th i tng l s dng php chiu phi cnh v php chiu trc giao

Php chiu trc giao, view volume c nh ngha l mt hnh hp ch nht, vt th nm trong view volume c chiu trc giao ln khung nhn do trong php chiu trc giao khong cch t camare n vt th khng nh hng n ln ca nh. Trong phn ny chng ta s tm hiu lm th no hin th mt hnh ln mn hnh, hnh c to ra bng cch xc nh cc nh, y l nhng im trong khng gian 3 chiu v vy cn ch r cc im trn hnh. Danh sch cc tham s Primitive Flag Description GL_POINTS Cc im GL_LINES on thng GL_LINE_STRIP ng gp khc khng khp kn GL_LINE_LOOP ng gp khc khp kn GL_TRIANGLES Tam gic GL_TRIANGLE_STRIP Mt di tam gic c lin kt vi nhau GL_TRIANGLE_FAN Cc tam gic lin kt theo hnh qut Khi v im, chc nng glPointSize c th thay i kch c ca im c v, kch c mc nh l 1. Khi v ng bn c th s dng glLineWidth xc nh rng ca ng, kch c mc nh l 1. Demo code Bc u tin l xc nh ta ca hnh vung t trn mn hnh, thit lp 3 gi tr (float) x, y, z cho mi nh

Khi to chng trnh

Thit lp ch ma trn bng cu lnh glMatrixMode(GL_PROJECTION) trc khi nh ngha php chiu

Thit lp ma trn hin thi v ma trn n v bng lnh glLoadIdentity()

phn u ca hng dn, chng ta s dng php chiu trc giao. Chc nng glOrthof c ch nh xc nh nhn theo php chiu trc giao, n bao gm glOrthof(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top,GLfloat near, GLfloat far)

n gi ta thit lp xong php chiu trc giao, tip n ta s v hnh bng cch s dng chc nng glVertexPointer, chc nng ny c 4 tham s: GLint size: Xc nh s lng ta cho mi nh GLenum type: Xc nh kiu d liu ca mi nh trong mng vi d nh GL_BYTE, GL_SHORT, GL_FLOAT v.v GLsizei stride: Xc nh khong cch byte gia cc nh lin tip, Nu stride bng 0 cc nh c hiu l c ng gi cht ch trong mng , gi tr ban u bng 0 const GLvoid *pointer: Xc nh v tr b nh ca gi tr u tin trong mng, n tr ti mng.

Chc nng glEnableClientState s ua ra mt trong nhng tham s ch nh mng phi c kch hot

By gi chng ta c th thit lp ch hin th, hy nh rng bn ang s dng th vin Vincent, mn hnh hin th chc nng cn phi chp nhn mt tham s UGWindow

Chc nng glDrawArray vi cac tham s GLenum mode: xc nh gi tr ban u v GLint first: Xc nh ch s ban u ca mng GLsizei count: ch r s nh x l 4

1.1 Mu sc v nh bng (Color and Shading) Tt c mu sc trong OpenGL c i din bi 4 gi tr, 3 gi tr mu , xanh l cy v xanh lam, cui cng l gi tri alpha, iu ny ch th hin r rng 1 mu. iu ny s c ni r hn trong phn ny. Ta s s dng mt mng mu.

Demo code Ta s khi to mt mng tam gic.

Tip theo ta s to ra mt mng mu. Chng ti cung cp cho mi nh mt mu sc khc nhau, mu , xanh l cy va xanh lam

Mt bin boolean shaded c to theo di xem c c nh bng hay khng, chng ti s dng bin ny chuyn i gia vic t bng hay khng t bng hnh Thit lp php chiu trc giao

Ta s dng hm glColorPointer thit lp cho mng mu, hm ny lm vic ging nh chc nng glVertexPointer, chng c 4 tham s v tham s u tin xc nh c 4 float (mt gi tr mu) cho mi nh . Chng ta phi kch hot cc nh v mng mu

By gi ta thm mu v shading (t bng) vo hnh. C 2 loi shading. iu ny c xc nh bng cch s dng chc nng glShadeModel, chc nng ny s a ra mt trong hai tham s GL_FLAT v GL_SMOOTH xc nh loi shading v GL_SMOOTH c thit lp theo mc nh.

Thit lp ch mn hnh hin th (nh phn trc) ch khc trong li gi chc nng glDrawArrays ta s dng c GL_TRIANGLES v 3 nh ca tam gic. 1.2 Php bin i (Transformations) Phn ny s gii thiu v cch chuyn i hnh theo cc cch khc nhau 1. 2. 3. Php t l - glScalef Php dch - glTranslatef Php quay - glRotatef

Demo code Khi to 2 bin dng quay theo trc x v y

Ta s khi to mt tam gic.

Khi to mt mng mu

Chc nng Init ch gi hm glClearColor

Thit lp ch hin thi

Ta s v mt tam gic pha bn tri mn hnh v mt hnh vung pha bn phi, tam gic s c t bng mn v hnh vung s c t bng. Cc thit lp trn tam gic cng nh bi trc 7

Ta s thay i on code nh sau. Nh rng trong hm reshape chng ta t i tng hin thi nh ma trn hin thi. Ma trn c s dng cho cc php bin i. C 3 php chuyn i s dng bi cc hm glTranslatef, glScalef v glRotatef. Cc gi tr f cui mi hm th hin bin u vo mang gi tr float. Sau khi v tam gic chng ta khng mun cc hnh sau b nh hng bi vic chuyn i. Chc nng glPushMatrix v glPopMatrix c s dng sao chp thm mt ma trn hin thi a ln nh ngn xp v loi b ma trn hin thi ra khi ngn xp. V d: ta mun v 1 chic t co 4 bnh, qu trnh v c m t nh sau: v thn xe, ghi nh bn u, tnh tin v bnh xe phi pha trc, v bnh xe, quay li vi tr bn (a thn xe v v tr trc khi tinh tin) ghi nh bn u, tnh tin bnh xe tri pha trc.

Hm glTranslatef vi 3 tham s cho truc x, y, z dch chuyn i tng (dch sang tri 0.25 n v v ln 0.5 n vi)

Hm glScalef vi 3 tham s xc nh t l ca i tng theo 3 trc x, y, z (gim kch thc ca tam gic xung mt na)

Hm glRotatef vi 4 tham s l gc quay v 3 tham s i din cho 3 trc x, y, z quay i tng (quay i tng theo 1 gc xrot theo trc x) V tam gic

Phc hi ma trn v thi im ban u 8

Tip theo chng ti s khng s dng mng mu cho hnh nn s kha chc nng ny li

Tip theo ta s v mt hnh vung c t bng

Ch rng khi chng ti khi to con tr nh, chng ti s dng 2 tham s u tin i din cho mi nh.

Thay v s dng mng mu ta c th s dng chc nng glColor4f hoc glColor4x Vic chuyn i hnh vung cng tng t nh hnh tam gic pha trn

cho php to ra hnh nh ng chng ti s dng chc nng idle, chc nng ny c gi l vng lp chnh trong khi khng c thng ip no ang c x l. Chng ti mun tng gc quay ca i tng trn trc x v truc y cng nh v li mn hnh sau khi thay i. iu ny c thc hin khi gi hm glutPostRedisplay hoc ugPostRedisplay

Bc cui cng l ta s thng bo cho th vin GLUT|ES / UG l chc nng idle c s dng. iu ny c hon thnh vi li gi hm glutIdleFunc / ugIdleFunc

1.1 Chiu su (Depth) Trong phn ny chng ta s tho lun lm th no thm chiu su vo chng trnh ca bn cho php cc z (trc) c th phi hp hot ng mt cch chnh xc iu ny c hon thnh khi s dng li gi n depth buffer. depth buffer c cha mt gi tr cho mi im nh trn mn hnh, gi tr ny trong khong t 0 n 1. iu ny i din cho khong cch t i tng n ngi xem, mi s ng b c s lin kt su v gi tr. Khi hai gi tr chiu su c so snh th gi tr thp hn s c hin th trn mn hnh. Demo code

Bc u tin ta phi bt chc nng depth buffer iu ny c thc hin thng qua c GL_DEPTH_TEST trong hm glEnable

Nh phn u ca hng dn chng ti ni n vic h thp hn gi tr ca chiu su, s phi hp cht ch hn cho ngi xem. iu ny c th thay i bng cch s dng chc nng glDepthFunc chc nng ny ch nh gi tr trong depth buffer so snh. Cc gi tr ny c thng bo qua bng sau: C GL_NEVER GL_LESS GL_EQUAL GL_LEQUAL M t Khng bao gi i qua i qua nu gi tr chiu su a vo nh hn gi tr c lu tr i qua nu gi tr chiu su a vo bng gi tr c lu tr i qua nu gi tr chiu su a vo nh hn hoc bng 10

GL_GREATER GL_NOTEQUAL GL_GEQUAL GL_ALWAYS

gi tr c lu tr i qua nu gi tr chiu su a vo ln gi tr c lu tr i qua nu gi tr chiu su a vo khng bng gi tr c lu tr i qua nu gi tr chiu su a vo ln hn hoc bng gi tr c lu tr Lun i qua

Gi tr c mc nh l GL_LESS chng ti mun th i qua khi cc gi tr bng nhau. iu ny s sy ra khi cc i tng c cng cc gi tr z, mn hnh s hin th ty thuc vo th t m i tng c in ra.

S th chiu su so snh cc gi tr bn phi khi to tt c cc gi tr trong b m. iu ny c th t c bng cch s dng chc nng glClearDepthf, chc nng ny s a ra mt trong nhng tham s ch ra gi tr v chiu su trong b m dng khi to cng.

Hin th mt s hnh tam gic trn mn hnh lm vic vi depth buffer

V tam gic th 2 hi trn tam gic u tin

Tam gic th 3 quay 45 theo trc z ca tam gic th 2

11

Cui cng l tam gic t cng vi trc z ca tam gic u tin, y l hnh tam gic nh nm pha bn phi.

1.2 Hnh phi cnh (Perspective ) Trong th gii thc, nu bn c nhiu i tng c cng mt kch c c t nhng khong cch khc nhau, bn s nhn thy rng cc i tng xa hn th s trng nh hn. Trong phn hng dn trc bn c th nhn thy rng cc tam gic pha sau thc s c cng kch thc vi tam gic u tin khi nhn. Trong phn hng dn ny s gii thch cch lm cho cc i tng xa hn th s trng nh hn, chng ta cng s tho lun hnh dng th no l t tiu chun bng cch s dng th vin UG. Demo code u tin chng ti s to 2 bin gi cho chiu rng v chiu cao ca ca s, bn s thy n c s dng th no sau ny.

Mt bin d gi xc nh x dng php chiu trc giao hay php chiu phi cnh iu ny cho php thay i gia 2 php chiu ta thy c s khc bit gia chng

12

Nu nh bn mun di chuyn v tr ca camera (gc nhn) bn s phi sa i ma trn chiu. iu ny l kh phc tp, c cch n gin hn l ta s dng chc nng gluLookAtf ca th vin GLU|ES. Tng t chc nng trong UG l gluLookAtf Chc nng ny s a ra 9 tham s iu ny bao gm 3 ta hoc vectors, u tin bn phi xc nh ni t camera, th 2 l xc nh im m bn mun camera c tr n cui cng l ch r vic chun ha trn vector. Thng s dng (0, 1, 0) cho vector ny on code di y th hin ni t camera cch 2 n v t gc v nhn v pha gc.

Tip theo l on code v 3 hnh vung, mi hnh s c xut hin pha sau v dch sang bn trai ca hnh pha trc, thay v to ra 1 mng vertex cho hnh vung chng ti s dng chc nng ugSolidCubef ca th vin UG, chc nng ny v ra mt hnh lp phng ta (0, 0, 0). Mt s cc chc nng khc tng t: ugSolidBox(GLfloat Width, GLfloat Depth, GLfloat Height); ugSolidConef(GLfloat base, GLfloat height, GLint slices, GLint stacks); ugSolidCubef(GLfloat size); ugSolidDisk(GLfloat inner_radius, GLfloat outer_radius, GLshort rings, GLshort slices); ugSolidSpheref(GLfloat radius, GLint slices, GLint stacks); ugSolidTorusf(GLfloat ir, GLfloat or, GLint sides, GLint rings); ugSolidTube(GLfloat radius, GLfloat height, GLshort stacks, GLshort slices);

13

Chc nng reshape ban u ca chng ti vn gi nguyn

Ging s dng glOrthof to ra hnh chiu trc giao. glFrustumf c s dng to ra hnh chiu phi cnh, cc tham s cng ging nh hm glOrthof nh tri, phi, di, trn, gn, xa. N s to ra mt gc nhn nh hn i vi nh v tr thp hn

Nh cc bn thy, chc nng ny khng trc quan. Mt chc nng khc, gluPerspectivef c to ra x l iu ny. Cng ging nh chc nng gluLookAtf, th vin UG tng ng l chc nng ugluPerspectivef v n c cc tham s sau: GLfloat fovy: iu ny ch ra phm vi ca gc nhn. Mt gc 90 ngha l bn c th nhn thy c mi th bn tri v bn phi ca bn, nhng y

14

khng phi l cch thc m con ngi nhn thy vt, ti s dng gc 45 chnh xc hn. GLfloat aspect: iu ny ch ra t l bn mong mun, n thng c ch nh nh l chiu rng chia cho chiu cao ca ca s. GLfloat n & GLfloat f: iu ny xc nh khong cch gn hay xa ca (This specifies the near and far clipping planes as normal.) on code di y thit lp gc nhn theo chiu phi cnh hay chiu trc giao ty thuc vo gi tr ca bin perspective.

15

By gi bn c th la chn nhn theo chiu phi cnh hay chiu trc giao Php chiu trc giao Php chiu phi cnh

1.3 Hnh khi (Solid Shapes) By gi chng ta c kh nng x l chiu su, v c th hin th i tng theo hnh chiu phi cnh, chng ta c th to ra mt i tng 3D Demo code Di y chng ti to mt mng cc nh to ra hnh hp, nhn thy rng chng ti khng to ra hnh hp bng cch s dng cc gii tam gic lin tc, chng ti to ra n bng cch to ra cc b mt ring bit.

16

Bc tip theo l thit lp mn hnh v xoay nh bnh thng

Chng ti mun v 2 mt i din c mu ging nhau v vy nn ta v 2 mt cng mt lc.

17

1.4 B lc mt sau (Backface Culling) Trong phn hng dn th 3.8 ta nhn thy cc hnh sau khi quay mt sau ca chng cng c a ra, khi to ra i tng 3D nh hnh hp trong hng dn trc, chng ti khng cn mt sau ca cc mt c hin th Mt k thut c gi l Backface Culling c s dng ngn chn cc mt trong ca hnh c a ra. iu ny c th tit kim c thi gian v v b nh. Demo code Bc u tin m chng ta cn phi thc hin kch hot ch backface culling bng cch thm cc on m di y vo hm init kch hot chc nng backface culling chng ti phi s dng c GL_CULL_FACE iu ny s lm cho tt c cc mt sau ca hnh khng b a ra. Bn c th hi l lm th no c th xc nh c mt sau ca hnh? Khi bn v cc hnh, bn ch nh cc nh trong mng theo hng chiu kim ng h v vy nu bn trong ma trn m chng ti a ra, tt c cc hnh c ch nh a ra nh theo hng cng chiu kim ng h

18

1.5 nh sng (Lighting) Bc u tin ta cn thc hin l kch hot backface culling nh trong hng dn trc, phn ny s hng dn lm th no thm nh sng vo cnh ca bn. iu ny lm tng tnh chn thc v cch nhn ca bn. C mt s loi nh sng c th c thm vo hnh ca bn: Ambient Light: nh sng bao xung quanh, n khng n t bt k mt hng no c th, khi nh sng bao xung quanh mt b mt nh sng s c phn x theo nhiu hng. Diffuse Light: nh sng khuch tn, n n t mt hng, nh sng khuch tn tng t nh anh sng bao quanh n cng c phn x theo nhiu hng. Specular Light: nh sng phn chiu, cng ging nh nh sng khuch tn nhng n c phn x theo mt hng, nh l bn c th thy nh sng ni bt trn b mt trc. Emissive Light: nh sng ta, nh sng ny n t mt i tng c th, cc i tng cso th gim lng nh sng nhng n khng th phn chiu ra bt k b mt ngoi no. Khng ch c th thp sng cc thuc tnh m bn ch nh, bn c th ch nh cc b mt phn ng nh th no vi nh sng Php tuyn l mt vector vung gc vi mt b mt. n c s dng trong vic tnh ton nh sng bn cn phi xc nh mt php tuyn cho mi a gic c v nu bn mun n b nh hng bi ngun sng. Demo code Di y ti s to ra 2 mng mu cho nh sng bao quanh v nh sng khuch tn. y s l mu sc ca nh sng ngun.

Tip theo ta s to ra 1 mng cht liu, mt nh sng bao quanh v mt nh sng khuch tn cho ngun

19

V bn cht iu ny lm tng gi tr ca nh sng bi cc gi tr ca cht liu n lm cho mu sc phn chiu ln cc b mt b mt. Cc mng b mt di mt n 40% nh sng , mi gi tr tng trng cho mu m n phn xa.

Bc u tin phi bt c GL_LIGHTING trong hm glEnable iu ny cho php s dng nh sng trong OpenGL OpenGL cho php bn c ti a 8 ngun sng t bt k im no kch hot c cc ngun sng ny bn phi bt c GL_LIGHTX trong hm glEnable, X l gi tr t 0 n 7.

Xc nh cc thng s cht liu cho cc m hnh chiu sng, thng qua cc chc nng glMaterialfv v glMaterialf cng vi 3 tham s. Tham s th nht l c GL_FRONT_AND_BACK Tham s th hai dng xc nh loi ngun sng m bn mun s dng nh GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR, GL_EMISSION v GL_AMBIENT_AND_DIFFUSE Tham s cui cng l mt mng hoc mt gi tr

Ging nh vic thit lp cht liu, nh sng cng c thit lp nh vy, iu ny c thc hin bng cch s dng chc nng glLightfv v glLightf

Phn cn li ca hm Init vn c gi nguyn

20

Phn u ca hm display vn c gi nguyn

phn trn chng ta ni v php tuyn, cc php tuyn ny cn vung gc vi b mt, bi vy b mt pha trc c mt vector php tuyn (0,0,1), pha sau l (0,0,-1). di 2 vector ny l 1 Cc php tuyn c xc nh bng hm glNormal3f v n c gi trc khi v hnh, hm ny c 3 tham s float.

iu ny cng c thc hin cho pha trn, pha di v cc mt

21

Vic

bt

tt

vic

gi

color

tracking

thng

qua

GL_COLOR_MATERIAL trong hm glEnable, Color tracking n s t ng t thuc tnh cht liu theo li gi n glColor4f , vic lm ny s lm cho cc mt phn x nh sng vi mu sc khc nhau Normal Lighting Color Tracking

1.1 nh hng nh sng (Directional Lighting) Trong phn trc ta thm nh sng vo cnh, nhng nh sng khng n t mt hng c th Trong phn ny ta s gii quyt vic nh hng ngun sng, iu ny s cho php ta s dng li ch ca khuch tn v phn chiu nh sng. Demo code Mt ln na ta li to cc mng nh sng cho cc c tnh nh sng, chng ta thm mng specular.

Mt mng specular cho cht liu cng l cn thit

V y l nh hng ngun sng nn chng ta cn phi bit v tr ca nh sng v hng ca n. on code di y s to ra 2 mng t nh sng trong khng gian pha bn phi ca qu bng, n s hng v pha gc nn cn 1 vector ch phng hng (-2, -2, -3).

22

Ngun sng s c bt cng vi nhng nh sng u tin

Tt c cc thuc tnh cho cht liu bao gm c gi tr specular

Mt thit lp khc bng cch s dng chc nng glMaterialf vi c tnh GL_SHININESS. Gi tr shininess trong khong t 0 n 128. iu ny ch tp chung lm th no specular s c t sng. Bc tip theo l thit lp thuc tnh nh sng

Thit lp v tr v nh hng nh sng thng qua c GL_POSITION v GL_SPOT_DIRECTION trong hm glLightfv

Mt c khc GL_SPOT_CUTOFF c s dng xc nh kch c ca ngun sng

Tip theo ta s s dng c GL_SPOT_EXPONENT dng xc nh cch thc tp trung ca ngun sng nh c GL_SHININESS vi gi tr t 0 n 128 Phn cn li ca hm Init vn c gi nguyn, hin c 3 c c s dng trong hm glLightf l GL_CONSTANT_ATTENUATION(1), GL_LINEAR_ATTENUATION(0) v GL_QUADRATIC_ATTENUATION vi cc gi tr hin th mc nh trong du (). Cng nh sng b suy yu khi bn di chuyn mng ra xa khi ngun sng.

23

Mn hnh hin th s dng chc nng glutSolidSphere / ugSolidSpheref to ra mt hnh cu, hnh cu ny c to ra vi 24 stacks v 24 slices, y l thnh phn ngang va dc ca hnh cu. Bn c th t hi ni m chng ti xc nh php tuyn, chc nng shape ca th vin UG / GLUT|ES s t ng to ra mt mng vector php tuyn v s dng, mi php tuyn s c tnh ton trong th vin ny. 1.2 Dn cht liu (Texture Mapping) Sau khi thm nh sng chc hn bn vn cha hi lng vi nhng g hin th ca i tng. Phn hng dn ny s hng dn bn lm th no thm cht liu vo i tng v n c gi l texture mapping. Bc u tin ca texture mapping l np cc file cht liu t bn ngoi. Cc file ny c th c cc ui nh bmp, jpg, gif, png v.vTrong phn hng dn ny ta ch lm vic vi file bmp bi v n d np vo nht. OpenGL cng lu rng cn phi lm vic vi nhng nh c kch thc l ly tha ca 2 nh 64x64, 128x128, 256x128 v.v Demo code Tt c cc cht liu u c mt nh dng c th. iu ny c th hin nh l mt unsigned integer, chng ta s to ra mt mng cha mt cht liu Sau khi ti cht liu vo chng ta phi ch r cht liu s xut hin nh th no trn i tng. iu ny c thc hin bng li gi hm texture coordinates Texture coordinates c ta trong khong t 0 n 1, ta (0. 0) l pha di bn tri ca cht liu v (0, 1) l pha trn bn phi.

24

on code di y to ra 1 mng c s dng lu tr texture coordinates

Nhng chc nng di y dng ti 1 file bitmap, trc khi bn np mt bitmap bn cn phi hiu cu trc ca n. u tin l tiu ca bitmap, n cha cc thuc tnh nh kiu tp tin v ni m bitmap c t. y l nhng thng tin cn thit np vo mt BITMAPFILEHEADER. Sau tiu bn s tm thy c mt s cc thng tin nh chiu rng, chiu cao, v cc bits trn mi im nh ca nh. Cc thng tin ny s c np vo BITMAPFILEHEADER. Cui cng l d liu nh hin thi sau 2 tiu Hm di y s cn 2 tham s. Tham s u tin ch r tn cu nh bitmap cn np vo, n s c tm trong th mc hin thi. tham s th hai l mt con tr tr ti BITMAPINFOHEADER

Chng ti s to ra mt s bin. u tin l mt con tr tr n cu trc FILE m tp tin ny

25

Nh ni trn chng ta phi np cc tiu ca tp tin, mt BITMAPFILEHEADER c s dng. D liu nh c th c i din bi mt s ca unsigned char's. chng ta s to ra 1 mng cha d liu ny. nh bitmap lu tr d liu im nh theo nh dng BGR. Chng ti khng mun iu ny khi chng ti lm vic theo gi tr RGB. Bin tmpRGB di y s gip chng ti gii quyt vn ny.

Mt ri ro v vic xc nh v tr lm vic hin thi. bin path s cha ng dn ca th mc hin thi, v bin fullPath s cha ng

Bc u tin trong vic xc nh th mc hin thi l li gi n hm GetModuleFileName, hm ny c 3 tham s. Tham s u tin l xc nh modun bn ang xem, nu c php th Null, bn s s dng modun hin ti. Tham s th hai xc nh ng dn c lu tr v tham s th ba xc nh s lng k t ti a np vo Bc u tin tm cc v tr cui cng ca k t '\'. iu ny c thc hin bi li gi hm wcsrchr Thay v loi b cc thnh phn cn li ca chui chng ta ch cn t k t Null sau v tr c tm thy. By gi chng ta phi chuyn i ng dn ny n multibyte character. iu ny t c bng cch s dng chc nng wcstombs. Bc cui cng trong vic xc nh v tr ca bitmap l kt ni ng dn cng vi tn file thng qua chc nng strcat 26

By gi ta c v tr ca bitmap v c th m n theo ch nh phn Nu tp tin khng c tm thy chng ta s hin th mt thng bo li

Cc BITMAPFILEHEADER c c vo trong cu trc

Mi nh bitmap c mt ID l 0x4D42, gi tr ny c lu tr trong cc bin bfType ca BITMAPFILEHEADER. Nu ID khng c tm thy th s ngng vic ti nh.

Bc tip theo l np vo cu trc BITMAPINFOHEADER

BITMAPFILEHEADER cha mt thuc tnh bfOffBits, n dng xc nh s bits thc t trn nh. V vy chng ti di chuyn con tr t u tp tin (SEEK_SET) n phn bt u ca d liu nh.

B nh c cp pht cho d liu nh. Kch c ca nh c lu tr trong cu trc BITMAPINFOHEADER

Sau khi b nh c phn b, chng ta cn phi np d liu nh t tp tin tng bit cng thi im.

27

Nh rng chng ta ni nh bitmap lu tr cc im nh theo nh dng BGR. V vy chng ta phi chuyn i li sang nh dng RGB.

Bc cui cng l ng tp tin v s dng con tr tr n d liu nh

By gi chng ta c 1 chc nng ti cc nh bipmaps. Thay v t cc lnh np nh bitmap v dn cht liu trong hm Init. Ta s t n trong hm loadTextures.

Nh ni pha trn chng ta phi to ra mt BITMAPINFOHEADER lu tr gi liu nh. Chng ta cng c th to ra mt con tr tr n d liu hnh nh.

Bc k tip l np nh bipmap s dng cho cc chc nng pha trn

Nh ni pha trn, mi cht liu trong OpenGL c gi thng qua tn ca cht liu. to ra cc nh danh, chng ta cn s dng chc nng glGenTextures, chc nng ny c hai tham s, tham s u tin xc nh c bao nhiu cht liu m bn mun to ra. Tham s th hai l mt con tr tr ti mng unsigned integers. iu ny s gip bn to ra cc tn cho cht liu.

28

By gi th tn ca cht liu c to ra, bn phi la chn cht liu m bn mun thit lp trong hin ti. iu ny thc hin c bng cch s dng hm glBindTexture. Hm ny c hai tham s, tham s u tin l GL_TEXTURE_2D v tham s th hai chp nhn cht liu m bn mun la chn.

Sau khi la chn cht liu, chng ta phi thit lp cc thuc tnh cho n. Chng ta cn phi xc nh cht liu l cc kt cu 2D v cc thuc tnh n c. iu ny c thc hin qua hm glTexImage2D hm ny c mt s cc tham s:

GLenum target: iu ny xc nh ch ca cht liu l GL_TEXTURE_2D, OpenGL ES khng h tr cht liu 1D hoc 3D. GLint level: dng xc nh mc chi tit, 0 l cp hnh nh c bn, n ch c s dng cho mipmaps ni c cc cht liu khc nhau ty thuc vo khong cch ca cht liu n ngi xem.

GLint internalFormat: iu ny xc nh mu sc cho cc thnh phn bn trong cht liu. N c th l GL_ALPHA, GL_RGB, GL_RGBA, GL_LUMINANCE hoc GL_LUMINANCE_ALPHA nhng chng ta thng ch s dng 2 c GL_RGB hoc GL_RGBA. C GL_RGBA ch c s dng khi bn s dng mt nh cha gi tr anpha nh tp tin tga.

GLsizei width & GLsizei height: dng xc nh chiu rng v chiu cao ca nh. iu ny c th ly t cu truc BITMAPINFOHEADER. GLint border: iu ny ch ra rng ca ng bin. N c gi tr l 0. GLenum format: iu ny c a ra cng gi tr nh l tham s internalFormat. GLenum type: iu ny dng xc nh kiu d liu ang c lu tr nh v d nh GL_UNSIGNED_BYTE v GL_UNSIGNED_SHORT.

const GLvoid *pixels: iu ny ch ra ni m nh c lu tr.

29

Nu bn ch mun s dng mt phn ca hnh nh, chc nng glTexSubImage2D c th c s dng. Cc tham s ca n ging nhau ngoi tr tham s internalFormat, c hai tham s khc l GLint xoffset v GLint yoffset, iu ny ch ra khong cch x, y cho nh.

thit lp cc thuc tnh khc cho cht liu, chc nng glTexParameterf c s dng. iu ny s c tho lun trong phn sau, by gi tt c nhng g bn cn bit l n cn 3 tham s. Tham s u tin l GL_TEXTURE_2D.Tham s th hai GL_TEXTURE_MIN_FILTER hoc GL_TEXTURE_MAG_FILTER, tham s th ba xc nh ci m bn mun thit lp cho thuc tnh - GL_LINEAR.

Cc cht liu c thit lp, chng ta phi gii phng b nh cp pht cho bitmap.

Trong hm Init chng ti s thm li gi hm n loadTextures.

bt chc nng texture mapping, chng ta cn phi s dng c GL_TEXTURE_2D trong hm glEnable

Nh chng ta lm trn vertices. Chng ta cn phi xc nh v tr ca texture coordinates iu ny c thc hin theo cng mt cch nh vi cc vertices ngoi tr by gi chng ta s dng chc nng glTexCoordPointer. Ch rng 30

gi tr 2 c s dng cho tham s u tin bi v mi texture coordinate ch c 2 gi tr.

Bc cui cng l cho php bt mng texture coordinate thng qua c GL_TEXTURE_COORD_ARRAY trong hm glEnableClientState

Mt hm menu dng bt v tt nh sng. Khi tt nh sng mu sc bn s dng khi to ra cc mt s c kt hp vo trong cht liu, bn c th nhn thy hnh di. Khi nh sng c bt nh sng phn x s phn x mt s lng nh sng bng nhau cho tt c cc mu do cht liu s c xut hin nh bnh thng. Lighting Enabled Lighting Disabled

31

Sau khi chy chng trnh bn s thy mt qu bng mu cng vi nh sng phn chiu pha trn bn phi ca qu bng, by gi bn c th t thm cc nh hng ngun sng vo chng trnh ca bn. 1.1 Hm cht liu (Texture Functions) Trong phn trc chng ta bit cch lm th no np mt nh bitmap v hin th n nh l cht liu ca i tng. Bn c gii thiu ngn gn v hm glTexParameterf. Phn ny s tho lun tip v chc nng ny vi nhiu kha cnh khc nhau. Texture Filters: b lc cht liu cho php cht liu c hin th cng vi cc cht lng khc nhau Repeating and Clamping: cht liu c th c lp i lp li trn i tng. Mipmaps: Mipmaps l to ra thm cht liu ca cng mt hnh nh. Nu bn c mt bc nh c 64x64. Hnh nh thm c to ra (32x32, 16x16, ..., 1x1). Cht liu chnh xc s c hin th ty thuc vo khong cch ca mng i tng. r rng cc mng i tng xa hn th s dng lp cht liu nh hn. iu ny c th tit kim c thi gian x l. Demo code Chng ta s to ra 4 cht liu khc nhau trong hng dn ny. Chng ti cng mun theo di cht liu bng cch s dng bin filter.

Ta cht liu chng ta vn gi nguyn ngoi tr cc b mt bn. Lu thng tin m chng ti cho rng c gi tr t 0 n 1. Chng ta c th s dng gi tr ln hn 1. Nhng iu ny s gy ra lp li cht liu hay dng khi t c 1. iu ny s c gii thch r hn phn di.

32

Chng ta xy dng hm loadTextures v np file .bmp nh phn trc.

Chng ta cn phi to ra 4 tn cht liu Chng ta la chn cht liu u tin v thit lp cc thuc tnh nh hng dn trc. S khc bit y l chng ta dng c GL_NEAREST trong thuc tnh ca b lc thay cho GL_LINEAR. B lc ny nhanh hn nhng nhn khng c tt lm.

33

Trong cht liu th hai chng ti s dng GL_LINEAR to ra cht liu nhn tt hn. y l nhng g c s dng trong hng dn trc.

Cht liu th ba cng ging nh cht liu th hai ngoi tr hai thuc tnh mi c thit lp. y l thuc tnh GL_TEXTURE_WRAP_S v GL_TEXTURE_WRAP_T. iu ny ch ra cht liu lm th no bao bc theo cc hng ngang v dc tng ng.

Th t l s dng cc k thut cao ca mipmaps. Mipmaps yu cu b nh nhiu hn nhng n c th lm cho chng trnh ca bn chy nhanh hn rt nhiu. t ng to ra mipmaps bn c th thit lp thuc tnh L_GENERATE_MIPMAP ti GL_TRUE bng li gi hm glParameterf. GL_TEXTURE_MAG_FILTER ca bn vn nh c nhng thuc tnh GL_TEXTURE_MIN_FILTER phi thay i. B lc ny phi c thit lp GL_X_MIPMAP_Y ni m X v Y c th LINEAR hoc NEAREST. iu ny dng xc nh cht lng ca cht liu c hin th. R rng NEAREST nhn khng tt bng LINEAR.

34

1.2 Pha trn (Blending) Hng dn ny s gii thiu v cch pha trn mu. Vic pha trn mu sc rt hu ch cho cc hiu ng v d nh: thy tinh, nc, mn hnh v.v.. Mt phn thit yu ca vic trn mu l gi tr alpha m chng ta ch nh cho tt c mu sc. Alpha c gi tr bng 0 th hin mt b mt hon ton trong sut v gi tr bng 1 th hin mt b mt m c. Khi lm vic vi s trn mu chng ta phi lun nh n 2 mu khc nhau. Th nht l gi tr ca mu ngun (gi tr hin ti thm vo) v bn ghi ca gi tr mu (gi tr tn ti trong b m). Mu sc s c lm ty thuc vo gi tr alpha. Demo code Tong phn ny ta s thit lp gc nhn theo chiu trc giao vi cc tham s:

Chng ta s t mt s lng hnh ch nht chng ln nhau trn mn hnh, cc nh cho hnh ch nht c a ra mng di y.

35

Chng ta s hin th cc kt hp khc nhau ca trn mu. Nhng bin di y s t chc nhng loi mu trn ang c thc hin. Chc nng Init ca chng ta s la chn mt mu xa mn hnh. Chng ta s khng s dng bt k chiu su no trong chc nng ny.

kch hot chc nng pha mu chng ta phi s dng c GL_BLEND ca chc nng glEnable.

Mt chc nng quan trng glBlendFunc c s dng ch nh mu sc nh th no trong vic trn mu. Chc nng ny c 2 gi tr. Xc nh mu sc nh th no c th c tnh. C 2 tham s c th chp nhn c cc gi tr sau: GL_ZERO GL_ONE GL_SRC_COLOR GL_ONE_MINUS_SRC_COLOR GL_DST_COLOR GL_ONE_MINUS_DST_COLOR GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA Tham s u tin cng c th chp nhn gi tr ca GL_SRC_ALPHA_SATURATE

Cc mng di y s dng chuyn i gia cc v d ca vic trn mu

36

Chc nng display l ni 4 hnh ch nht to thnh 1 hnh vung

Chng ta s to thm chc nng menu x l la chn Blending Function v thay i vic trn mu.

Sau khi chy chng trnh bn c th thay i ch trn mu bng cch nhn phm b. 37

Mc nh ca chc nng trn mu l (GL_ONE, GL_ZERO) iu ny lm cho mu sc khng b pha trn. (GL_ONE, GL_ZERO)

Chc nng trn mu tip theo l (GL_ONE, GL_ONE). iu ny v c bn c im ngun v im ch ca mu sc v chng c trn vo vi nhau. Mt hn hp ca mu xanh l cy v mu to ra mu vng nh chng ta nhn thy gc trn bn tri. Thanh mu vng c mu xanh l cy gi tr l 1. Thanh mu xanh l cy c s pha trn ca mu vng nn vn gi nguyn mu vng. Khi mu vng c pha trn vi mu xanh lc. Gi tr mu sc tr thnh 1 kt qu hin th mu trng.

38

(GL_ONE, GL_ONE)

Tip theo l chc nng (GL_ONE, GL_ONE_MINUS_DST_ALPHA). Kt hp nhng gi tr alpha, nh bn nhn thy iu ny to ra 1 cht minh bch nhng mu vng pha trn vi mu xanh l cy vn gi nguyn mu vng, mu vng pha trn vi mu xanh l cy s ra mu trng nh trc. (GL_ONE, GL_ONE_MINUS_DST_ALPHA)

Chc nng trn k tip l (GL_SRC_ALPHA, GL_ONE), to ra mt hnh tt hn, minh bch hn. Tt c cc hnh ch nht gi xut hin minh bch, hnh ch nht mu vng gi b m hn n c gi tr alpha l 0.75. Hnh ch nht mu xanh cng nh vy n c gi tr alpha bng 0.25.

39

(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)

Mc d vic trn mu lm vic tt, c th bn vn mun cc hnh pha di hin r hn iu ny t c bng (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) ca chc nng trn mu. (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)

1.1 Minh bch i tng (Transparency) Trong phn hng dn trc chng ti ni v cch lm vic vi s pha mu. Chng ti nhn thy vic lm ny rt hu ch cho vic lm minh bch i tng, trong phn hng dn ny s hng dn bn lm minh bch mt i tng 3D. Hng dn ny c sa i t hng dn 3.13 Texture Mapping Demo code 40

Bc u tin l bt chc nng trn mu trong hm Init

Chc nng pha trn m chng ti s dng l (GL_SRC_ALPHA, GL_ONE)

Chng ti mun tt c cc a gic c v ra bi vy chng ti v hiu ha chc nng depth testing. C chiu su s lm cho cc a gic pha sau khng c hin th.

Trong hm menu.

Chng ta c th to ra mt s hiu ng tt. Ta c li m kch hot hay v hiu ha nh sng nh trong hng dn 15. S khc bit khi nh sng b v hiu ha s c hin th di y. Lighting Enabled Lighting Disabled

41

1.2 Hiu ng sng m (Fog) Hng dn ny s bn v hiu ng sng m, iu ny c th rt hu ch cho mt s cc ng dng. Hy tng tng bn ang to ra mt tr chi m bn c th di chuyn t quc gia ny n quc gia khc, hin nhin bn khng th hin th y mi th 2 ni iu ny s gy ra s lng ph, bn cng khng mun cnh vt bt ng xut hin. Hiu ng sng m c s dng to cho bn cm gic c mt lp sng m lm gim kh nng nhn ca bn. Fog cng lm cho cnh vt tr ln hin thc hn bng cc t Fog trong nhng khu vc c sng m nh l cnh mt thung lng. Hng dn ny c xy dng theo hng dn 15 - Texture Mapping Demo code Fog c th c mu sc c th, bi vy chng ti to ra mt mng lu tr mu sc ny. y chng ti s dng lp sng m mu xm.

C 3 ch sng m: C GL_EXP M t y l dng n gin nht ca Fog, i tng khng thc s xut hin di chuyn vo hoc ra khi Fog. iu ny n GL_EXP2 gin ch l vic to ra mt lp sng m. y l dng cao hn ca Fog. i tng c th xut hin ngay khi di chuyn vo hoc ra khi Fog. Bn c th thy lp sng m khng xut hin hon ton trong thc t nh l cc ng c th khi nhn vo mt im ni m i tng i chuyn ra khi Fog GL_LINEAR y l cch hin thi Fog mt cc thc t nht, i tng c th vo v ra khi Fog mt cch ng cch nht, em li hiu ng sng m mt cch tt nht. Mc d GL_LINEAR l ch sng m thc t nht, iu ny khng c ngha l bn phi lun lun s dng n, r rng cc hiu ng sng m tt

42

hn s lm chng trnh ca bn chy chm hn vy nn ch bn chn s ph thuc hon ton trn ng dng ca bn. Chng ti s to mt mng cha ch sng m. Cho php chng d dng thay i. Chng ti cng to ra mt s nguyn xc nh xem ch sng m no ang c s dng.

Hai chc nng m bn s s dng nhiu nht khi lm vic vi Fog l chc nng glFogf v glFogfv. Chc nng fixed nh glFogx v glFogxv l cc chc nng c sn ca OpenGL ES Chc nng glFogf chp nhn 2 tham s. Tham s u tin l c dng xc nh cc thuc tnh ca sng m c thay i. Tham s th hai l gi tr float dng gn cc thuc tnh ny. Bng di y s miu t cc thuc tnh ca Fog v cc gi tr float m n s dng: C GL_FOG_MODE Gi tr float GL_EXP, GL_EXP2 Miu t Xc nh ch sng m

hoc GL_LINEAR nh gii thch trn GL_FOG_DENSITY > 0.0f (mc nh 1.0f) iu ny ch ra lp sng m nh th no gi l dy c. Gi tr cng cao th lp GL_FOG_START GL_FOG_END Any float (mc nh 0.0f) Any float (mc nh sng m cng dy c Xc nh khong cch gn nht ca sng m Xc nh khong cch xa

1.0f) nht ca sng m By gi chng ta hiu lm th no thay i thuc tnh ca Fog. Chng ta s thit lp ch sng m ban u ti GL_EXP.

43

Chc nng glFogfv c s dng cho mt thuc tnh. y l thuc tnh GL_FOG_COLOR n dng miu t mu sc ca sng m. Tham s th hai chp nhn mt mng float, chng ti s dng mng mu fogColor cho chc nng ny. Tip theo chng ta s thit lp mt sng m. Th thay i gi tr ca n thy c lp sng thay i th no. Mt chc nng khc khng dnh ring cho Fog l hm glHint chc nng ny cho php bn xc nh nhng th quan trng nh hnh/tc ca bn c hiu lc. Tham s u tin c th l mt s gi tr nh GL_FOG_HINT, GL_LINE_SMOOTH_HINT, v GL_FOG_HINT. Tham s th 2 c th c l GL_DONT_CARE, GL_FASTEST hoc GL_NICEST nu chng ta mun lp sng m ca chng ta l tt nht c th, chng ta phi s dng c GL_NICEST. Cn nu chng ta qua tm nhiu hn n tc th ta s dng c GL_FASTEST. Gi tr mc nh l GL_DONT_CARE. iu ny lm nng cao hiu qu ca sng m khi c thi gian lm vic ny. Chng ti s dng c GL_DONT_CARE cho hm glHint di y. iu ny khng cn thit v n l gi tr mc inh, chng ti hin th n y cho bn bit rng c th tng hiu qu ca sng m. GL_PERSPECTIVE_CORRECTION_HINT Chng ti ch s dng c GL_POINT_SMOOTH_HINT.

Khong cch gn va xa ca lp sng m

Nh tt c cc phn khc ca OpenGL ES chng ta phi kch hot chc nng sng m thng qua c GL_FOG ca hm glEnable.

44

By gi ta c th kch hot v khi chy Fog trong hm init, chng ta c th hin th chng trn Display. Thay v s dng chc nng ugluLookAtf chng ta c th dich chuyn ma trn modelview.

Phn cui cng l thay i chc nng menu, khi ch Fog c la chn, chng ta mun thay i ch sng m, iu ny c thc hin bng cc s dng mng fogTypes c xc nh phn u ca hng dn.

45

You might also like