Do an Tot Nghiep(31.05.2009)

Embed Size (px)

Citation preview

N TT NGHIP______________________________________________________________________________________

TRNG HBKHN KHOA C KH-------------

CNG HA X HI CH NGHA VIT NAM c lp - T do - Hnh phc-------------------------

***------------

***----------------------

NHI

V THIT K N

NH C

H v tn sinh vin: NGUYN C NHIN Khoa: C kh p: C in t 1 K49 B mn: C hc ng dng

Gio vin hng dn: TS. 1. u thit k

PHAN BI KH I

p trnh m phng hot ng cu rbt Scara 4 bc t do. 2 .Cc s liu ban u 3 .Ni dung thuyt minh v tnh ton n gm cc phn chnh sau: A. Mc ch ca n tin hc ng dng Tm hiu - Tm hiu v 1 robot c th s dng trong cng nghip(Robot Scara) - Tm hiu v cc c cu hot ng ca Robot cc khu hot ng ca Rbt. - Tm hiu v ng hc v m hnh 3D ca Robot m phng hot ng ca Robot - Tm hiu cch xy dng chng trnh iu khin cho robot B. Nhim v ca em trong n tin hc ng dng l xy dng chng trnh m phng hot ng ca robotScara 4 bc t do. 1

N TT NGHIP______________________________________________________________________________________

+ Cc cng c xy dng bi ton m phng - Ngn ng lp trnh C++(Xy dng giao din MFC,xy dng chng trnh dc file d liu c dng .*BDF v .*STL). - Lp trnh ha OPEN GL xy dng cc khi ha m phng (Tm hiu k cc gi th vin ca OPEN GL). - Cc cng c cn xy dng l Visual C++ 6.0 (to Project vi Visual C++) C. Kt qu t c qua n - Hiu uc nguyn l hot ng ca Robot trong cng nghip qua chng trnh m phng - C 1 chng trnh c th m phng . - Tm hiu v lp trnh M PHNG vi openGL. - Tm hiu v phn mn lp trnh Visual C++ 6.0. - Tm hiu v ngn ng lp trnh VC++ . 4 .Yu cu chung - N m vng kin thc c s v C hc kho st bi ton t nh hc. - S dng thnh tho t nht mt phn mm thit k, n m vng kin thc v tnh ton thit k chi tit my, cc b truyn ng c kh. - Cc phn ca thuyt minh gm Trang ba, Nhim v thit k, mc lc, gii thiu, ni dung ( t bi ton, thc hin, kt lun), ti liu tham kho. - Phn t vn cn c th, r rng, ch ra c mc ch, nhim v, kt qu mong mun. Phn thc hin trnh by c s l thuyt kho st, tnh ton, thit k C : y , 2

N TT NGHIP______________________________________________________________________________________

, c xy dng,

. Cc kt qu nhn c

th hin di dng th , bng s, ho c ghi ra file kt qu, cc phn mm

- Thuyt minh n c trnh by trong t nht 20 trang kh giy A4, son tho b ng my tnh, c ch 13-14, 1.5 line, font ting Vit (Times New Roman), l trn di 2cm, tri 3cm, phi 2cm. In mt m t, ng thnh quyn khi hon thnh v np cho gio vin hng d n ng thi hn c duyt v cho ph p bo v kt qu trc hi ng chm n mn hc. 5 .Ngy hon thnh nhim v Ngy 09 thng 11 nm 2008 Ch nhim b mn Gio vin hng d n ..

Sinh vin hon thnh (v

Ngy 09 thng 11 nm 2008

3

N TT NGHIP______________________________________________________________________________________

MC LCMC LC ..................................................................................................................... 4 LI NI U ......9 GII THIU TNG QUAN V ROBOT CNG NGHP V M PHNG HOT NG .11 CHNG I: CC C NG C XY DNG BI TON PHNG HOT NG CA ROBOT ................................................................................................... 131.1. Gii thiu v Open GL .. 1.1.1. c im ca OpenGL .. 1.1.2. Cc th vin h tr lp trnh OpenGL .. ...14 .....13

20

1.1.3. Cc bc tng quan khi xy dng ng dng ha vi OpenGL ...21 1.1.4. Xy dng cc i tng 3 chiu .. 1.1.5. Quan st cc i tng 3 chiu . ....... 23

24

4

N TT NGHIP______________________________________________________________________________________

1.2.Gii thiu v VisualC++ v ng dng MFC . ...

.27

1.3. Tm hiu phn mm thit k VS 6.0 v AutoCAD , SolidWorks . ...28

CHNG II: CC BC XY DNG BI TON2.1. Cch to ra mt project MFC m phn 2.2. Khi to v thit lp cc gi th viOpenGL 2.3. Thit k m hnh Robot trn SolidWork 2007 . ...58 2.4. Xy dng module c file .*STL v .*BDF . ... 2.4.1. Xy dng module c file .*STL 61 2.4.2 Xy dng module c file .*BDF . . .. 2.5. M phng chng trnh trn OpenGL .. .. .

PHNG 32 ..32 ...39

61

65

74

CHNG III: CHY CHNG TRNH

PHNG ............................................ 75

KT LUN ................................................................................................................... 81

Ti liu tham kho ...................................................................................................... 83

5

N TT NGHIP______________________________________________________________________________________

DANHH 1.1 : M OpenGL.................16

C CC HNH V TRONG N : 2 v v 3 v v q 1 S j MFC S d v 2 dw dWorks v x

H 1. 2 : M OpenGL......................................16 H 1. 3 :M .......................17 H 1. 4 :M .......................18 3 4

H 1.5: M OpenGL.19

H 1. 6 :M 1 OpenGL...20 H 1.7 : C 2007.28 H 1.8 :M ...29

H 1.9 : G d AutoCAD..30 H 1.10: G d MFC..31. q

H 2.1 : B ..33 H 2.2 : ...34 T

1 ..

H 2.3 : T 2..34 H 2.4 : T 3...35 H 2.5 :T ...36. 4

6

N TT NGHIP______________________________________________________________________________________

H 2.6 : T 537 H 2.7 : H MFC.37. d v O D s v y y d O O O O GL GL GL GL P j P j

H 2.8 : C y MFC.38. H 2.9 : C MFC.39 H 2.10 : T OpenGL...40. H 2.11 : C ..45. H 2.12 : C 47. H 2.13 : C ....48. H 2.14 : C 50 H H H H 2.15 : C 2.16 : T 2.17 : C 2.18 : T y v j O P j O Sz O P O

GL 53. MFC .54 y O GL..55

O T

O T

.56 N w

H 2.19 : T Symbol....57 H 2.20 : C y 1

OpenGL57 R

H 2.21 : V ..58. H H 2.22 : V 2.23 : V 1 2 R R

..59 ..59 K

H 2.24 : 360.

7

N TT NGHIP______________________________________________________________________________________

H 2.24 : 3.60. H 2.25 : M 2007.61 R v S

K dW s R s STL s f

H 2.26 : C y File.*STL..62 H 2.27 : C y .*STL..63 H 2.28 : C ASCII...64. H 2.29 : C y .*STL65 H 2.30: C X W s d v f .*

y..66 A CAD

H 2.31 : T XchangeWorks.66. H 2.32: P 2000....67. H H H H H 2.33: H 2.34 : I 2.35: H 2.36: T 2.37 : K /X O L d/U f dA *.s d

...68 .69 3D70

..68 FF

s .71 R S 1 1 1 1 1 1 E v

H 2.38 : M OpenGL..74. H H H H H H 3.1 : R 3.1 : R 3.2 : R 3.3 : R 3.4 : R 3.5 : R y y y y y y q q q q q q

..75. .76. ....77. s ..78. S .79 3 .....80

8

N TT NGHIP______________________________________________________________________________________

9

N TT NGHIP______________________________________________________________________________________

I NI URobot cng nghip l l nh vc c nghin cu v pht trin mnh trn th gii. nc ta l nh vc ny cn mi m ngy nay trong mi trng sn xut hin i, hu ht cc quy trnh c thc hin b ng cc my chuyn dng. Vi cc phng php ny, lm gim r rt chi ph sn xut cc sn phm cng nghip ph hp vi a s ngi tiu dng. Tuy nhin mi my cng c, c thit k thc hin nguyn cng cho trc, mi khi cn thay i kiu m u sn phm, th ton b dy chuyn sn xut phi c ci to li. Vic sa i rt tn k m. Kiu t ng ho ny l kiu t ng ho cng v rt tn k m. Do vy, m trn th gii c phng php sn xut tin tin tin l ch to ra cc loi Robot c a vo quy trnh ch to thc hin nhiu nguyn cng nh: chuyn ti vt t v cc thit b trong cc dy chuyn hin i, hn im, sn phun v l p rp trong cng nghip t .. . Do cc c cu hot ng c iu khin b ng my tnh ho c cc b vi x l, chng c th ti lp d dng cho nhiu nguyn cng khc nhau, do khng cn thay cc my mc ny khi thay i kiu m u sn phm. y l kiu t ng ho linh hot v mang li hiu qu kinh t cao v rt cn thit trong hon cnh ca t nuc ta hin nay ang tin ti cng nghip ha v hin i ho t nuc. Robot cng nghip c ng dng rng ri trong cc dy truyn sn xut hin i v c s linh hot cao v vy vic nghin cu v ch to r bt l cn thit. Trong qu trnh tnh ton v thit k v ch to Rbt th vic m phng cc hot ng ca Rbt l mt phn rt quan trng. Qu trnh m phng s cho ta thy c s hot ng v qu trnh lm vic ca Rbt. Vi cc ngh a trong mn hc n tin hc ng dng vi s hng d n ca thy gio TS Phan Bi Khi em chn ti Xy dng chng trnh m phng hot ng ca Robot Scara 4 bc t do. 10

N TT NGHIP______________________________________________________________________________________

Em xin cm n thy to iu kin thun li v hng d n ch bo tn tnh gip em hon thnh tt n tin hc ng dng ny.

GII THIU TNG QUAN V R BT C NG NGHIP V PHNG HOT NGNgy nay, robot cng nghip c vai tr rt quan trng v c ng dng rng ri trong qu trnh sn xut ca nn cng nghip hin i. ch to ra c mt m hnh robot v em ra phc v cho sn xut phi tri qua rt nhiu giai on nh : tm hiu v cc loi robot v cc c tnh hot ng ca n,tnh ton mt cch chnh xc cc khu ca cc c cu, cc phng trnh hot ng v thit k cc m hnh 3D sao cho ti u v hiu qu nht.Mt m hnh robot hot ng trn tru v p ng c cc yu cu k thut ra i hi vic ch to l ht sc t m v chi tit tng bc mt. Trong mt m hnh robot bao gm rt nhiu phn nh C kh ch to ra cc chi tit, in t iu khin cc hot ng v tin hc lp trnh cho cc c cu ca robot hot ng theo cc qu o v yu cu k thut ra. Mt phn cng rt quan trng m mt m hnh robot no cng phi thc hin l m phng qu trnh hot ng ca n. Sau khi hon thin m hnh robot th m phng chnh l kim tra trn my tnh xem m hnh robot c hot ng tt hay khng, c thc hin c cc yu cu t ra hay khng, sau a vo cc thng s tnh ton, gii lp qu trnh hot ng ca i tng mt cch trc quan nht. Trn c s c th kim nghim c qu trnh hot ng ca c cu c ng theo kt qu tnh ton v thit k hay khng. M t khc, cng c th thay i mt cch linh hot cc s liu, cc thng s ban u vo tm ra li gii cho bi ton ti u c cu. M phng cn ng vai tr rt ln trong vic ging dy, bo co, truyn t thng tin v sn phm 11

N TT NGHIP______________________________________________________________________________________

cho mi ngi. Gip cho nh thit k c c nhn tng quan v sn phm t c th ci tin sn phm, ho c a ra mt quy trnh sn xut n gin, ti u cho sn phm. V vy c th thy m phng l mt khu rt quan trng, khng th thiu trong qu trnh ch to sn phm nh cc loi robot cng nghip. Trong l nh vc c kh c rt nhiu phn mm ni ting nh : AutoCAD, Inventor, SolidWorks, Catia . Dng tnh ton, thit k v m phng, kim tra cc iu kin lm vic ca chi tit . Tuy nhin, cc phn mm ny cn b hn ch khi cn m phng kt cu hot ng theo mt quy trnh tnh ton c th v d nh hot ng ca robot theo 1 theo 1 qu o c th . Khi , c th ch ng, linh hot trong qu trnh tnh ton v thit k th n gin v tin li l lp trnh m phng, qua ta c tht xy dng v p ng ng vi ni dung v mc ch thit k. lp trnh m phng c hot ng ca robot th trong n tin hc em chn ngn ng lp trnh Visual C++ v c kt hp vi th vin ha ca OpenGL xy dng c bi ton m phng ph hp vi yu cu. Ni dung ca n tt nghip Lp trnh m phng hot ng ca Robot Scara 4 bc t do gm c 3 chng nh sau : Chng 1 : CC C NG C XY DNG BI TONCA R BT PHNG HOT NG

Chng ny gii thiu v cc cng c cn thit xy dng bi ton m phng nh ngn ng lp trnh Visual C++, cc ng dng MFC v th vin ha OpenGL, phn mm thit k nh AutoCAD, SolidWorks Chng 2 : CC BC XY DNG BI TONPHNG.

12

N TT NGHIP______________________________________________________________________________________

Trong chng ny bao gm cc bc cn thit thc hin xy dng chng trnh khi m phng, nh khi to d n MFC, nhp cc th vin OpenGL, thit k cc m hnh . Chng 3 : CHY CHNG TRNHPHNG THEO QU O S HA.

Chng ny gii thiu khi qut v chng trnh m phng xy dng c, cch s dng cc chc nng chnh m chng trnh c th cung cp . CHNG I CC CNG C XY DNG BI TON M PHNG HOT NG CA ROBOT Cc cng c xy dng bi ton m phng gm c: - Th vin ha OpenGL. - Ngn ng lp trnh Visual C++ v cc ng dng ca MFC. - Phm mm thit k Solidworks v AutoCAD. 1. Gii thiu chung.

1.1- Gii thiu v phn mn OpenG hiu mt cch c th v cng c ha nh OpenGL th mt cu hi c t ra l : OpenGL l g ? v ti sao li s dng OpenGL cho bi ton m phng.

Hnh 1.1

Logo OpenGL

13

N TT NGHIP______________________________________________________________________________________

OpenGL l ch vit t t ca Open Graphic Library l 1 th vin ha tc cao v c lp vi h thng giao din cc h iu hnh. Tin thn ca OpenGL l IRIS GL do hng Silicon Graphic Library Inc pht trin cho cc WorkStation ha tc cao t nm 1982.Sau t nm 1992 th OpenGL tr thnh mt chun cng nghip v c tnh k thut ca OpenGL do y ban k thut ARB (Architectural Review Board ) ph chun. Trong cng ngh ha ng ang ngy cng c ng dng trong cuc sng v ngy nay n c pht trin tng i mnh m Vit Nam.Trong k thut th vic s dng cc ng dng ca OpenGL cng nh DirectX vo vic m phng cc c cu my mc, cc hat ng ca Rbt cng nghip trc khi em th nghim b ng m hnh thc l gii php m rt nhiu k s c kh cng nh cng nh cc vin nghin cu la chn do tnh u vit ca n trong vic th hin cc m hnh ha ng trong khng gian 3 chiu (3D). V vy trong phm vi ca n ny em chn cch s dng OpenGL xy dng bi ton m phng. 1.2 Gi thiu v C ch hot ng ca Open G .

Hnh 1.2 : C ch hot ng ca OpenGL

OpenGL c c ch hot ng theo kiu ng d n tc l u ra ca giai on trc l u vo ca giai on sau.T s th cc thnh phn ca c ch c gii thch nh sau : 14

N TT NGHIP______________________________________________________________________________________

+ Display List: L ni lu li mt s lnh x l sau. + Evaluator: Xp x cc ng cong v m t phng hnh hc b ng cch nh gi cc a thc ca d liu a vo. + Per-vertex operations and primitive assembly: X l cc primitive (im,on,a gic) c m t bi cc vertex. Cc vertex s c x l v cc primitive c c t x n vo viewport chun b cho khu k tip. + Rasterization: sinh ra mt lot cc a ch framebuffer v cc gi tr lin quan b ng cch s dng m t 2 chiu ca im, on,a gic.Mi phn t (fragment) c sinh ra s a vo giai on k tip. + Per-fragment operations: Cc tc v sau cng (cp nhp c iu kin cho framebuffer da vo d liu vo v d liu c lu tr trc ca gi tr z (i vi z buffering), thc hin trn mu cho cc pixel v lm mt s thao tc khc) s c thc hin trn d liu trc khi n c chuyn thnh pixel v a vo framebuffer. Trong trng hp d liu vo dng pixel khng phi vertex, n s a thng vo giai on x l pixel. Sau giai on ny, d liu dng pixel s c lu tr vo texture memory a vo giai on Per-fragment operation ho c a vo Rasterization nh d liu dng Vertex(tc l cc im). 1.3 c im ca OpenG . Cc kh nng ca th vin OpenGL cung cp.OpenGL l mt th vin ha rt ln gm khong 150 hm h tr mt s tnh nng c bn sau: 1.3.1.Kh nng th hin cc i tng ho c bn. OpenGL cng c cch xy dng cc i tng theo cch ring. Trong OpenGL, mi i tng hnh hc u c m t c bn t cc vertex. Vertex cng c th 15

N TT NGHIP______________________________________________________________________________________

hiu l mt im. 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);

T hnh v trn ta c th thy cc trng khai bo c ni dung nh sau:[v] - vct cha cc phn t l ta ca Vertex. {sifd}- kiu tham s ca vector: Interger, float {234}- s phn t ca vct

Cc i tng ho c bn nh im,on thng,a gic,cc ng cong hay m t cong bc hai. Gi tr GL_POINT ngh a. Hm ny cung cp cc chc nng v im (tc l tng Vertex c v ring) GL_LINE V ng thng ni gia 2 im ( Mi c p vertex c coi nh 2 u mt on thng) GL_LINE_STRIP Tp hp ca nhng on thng ni vi nhau ( B 4 vertex xem nh cc nh t gic (c l p)) GL_LINE_LOOP ng gp khc kh p kn(Nh trn nhng vertex u v cui c ni vi nhau (l p vng)) GL_TRIANGLES V hnh tam gic.( B 3 vertex c xem cc nh mt tam gic (khng l p)) GL_QUADS V t gic.( B 4 vertex c xem nh 4 nh 1 a gic (khng l p)) GL_TRIANGLES_STRIP V tp hp cc t gic lin nhau chung mt cnh.( B 3 vertex xem nh cc nh tam gic (c l p))

16

N TT NGHIP______________________________________________________________________________________

GL_TRIANGLE_FAN

V hnh qut.( Vertex 0 l nh chung kt hp c p nh bt k to tam gic)

Di y l mt s hm th hin cc i tng c bn

17

N TT NGHIP______________________________________________________________________________________

Hnh 1.3: Cc i tng ha c bn.

Ngoi ra cn c mt s i tng 3 chiu c bn nh: Hnh cu, hnh tr, hnh hp vv... t ta xy dng c cc i tng 3 chiu phc tp hn, thm ch c th t nh ngh a hay thit k cc phn mm h tr thit k 3 chiu nh AutoCAD, SolidWorks, 3D Max.Cc lnh thc hin qu trnh v cc im trong mi trng 2D ca OpenGL nh sau:glBegin(GL_POINTS); glVertex2f(0.0f,0.0f); glVertex2f(1.0f,0.0f); glVertex2f(0.0f,1.0f); glEnd();

18

N TT NGHIP______________________________________________________________________________________

Hnh 1.4: Qu trnh v cc Vertex 2D trn OpenGL

Cc lnh v cc im to thnh hnh ng gic trong mi trng 2D nh sau:glBegin(GL_POLYGON); glVertex2f(0.0f,0.0f); glVertex2f(3.0f,0.0f); glVertex2f(4.0f,3.0f); glVertex2f(1.5f,6.0f); glVertex2f(-1.0f,3.0f); glEnd();

1.3.2. Kh nng quan st i tng. Cc i tng c th quan st t nhiu gc khc nhau thng qua cc ph p bin i v tr m t nhn hay ph p bin i v tr vt cng nh cc ph p chiu... 1.3.3. Kh nng nh mu sc vt liu i tng. C th th hin mu s c i tng mt cch a dng v c bit l kh nng th hin thuc tnh vt liu.void COpenGLView::RenderScene () { glTranslatef(0.0f,0.0f,-5.0f); glRotatef(m_xRot,1.0f,0.0f,0.0f); glRotatef(m_yRot,0.0f,1.0f,0.0f); //Front Face glBegin(GL_POLYGON); glColor3f(1.0f,0.0f,0.0f);

19

N TT NGHIP______________________________________________________________________________________glVertex3f(-1.0f,-1.0f,0.0f); glColor3f(1.0f,1.0f,0.0f); glVertex3f( 1.0f,-1.0f,0.0f); glColor3f(1.0f,0.0f,1.0f); glVertex3f( 1.0f, 1.0f,0.0f); glColor3f(1.0f,1.0f,1.0f); glVertex3f(-1.0f, 1.0f,0.0f); glEnd(); glColor3f(1.0f,1.0f,0.0f); //Back Face glBegin(GL_POLYGON); glVertex3f(-1.0f,-1.0f,-1.0f); glVertex3f(-1.0f, 1.0f,-1.0f); glVertex3f( 1.0f, 1.0f,-1.0f); glVertex3f( 1.0f,-1.0f,-1.0f); glEnd(); glColor3f(1.0f,0.0f,1.0f); //Left Face glBegin(GL_POLYGON); glVertex3f(-1.0f,-1.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 0.0f); glVertex3f(-1.0f, 1.0f,-1.0f); glVertex3f(-1.0f,-1.0f,-1.0f); glEnd(); glColor3f(0.0f,1.0f,0.0f); //Right Face glBegin(GL_POLYGON); glVertex3f(1.0f,-1.0f, 0.0f); glVertex3f(1.0f,-1.0f,-1.0f); glVertex3f(1.0f, 1.0f,-1.0f); glVertex3f(1.0f, 1.0f, 0.0f); glEnd(); glColor3f(0.0f,1.0f,1.0f); //Top Face glBegin(GL_POLYGON); glVertex3f(-1.0f, glVertex3f( 1.0f, glVertex3f( 1.0f, glVertex3f(-1.0f, glEnd();

1.0f, 1.0f, 1.0f, 1.0f,

0.0f); 0.0f); -1.0f); -1.0f);

glColor3f(0.0f,0.0f,1.0f); //Bottom Face glBegin(GL_POLYGON); glVertex3f(-1.0f, glVertex3f(-1.0f, glVertex3f( 1.0f, glVertex3f( 1.0f, glEnd();

-1.0f, -1.0f, -1.0f, -1.0f,

0.0f); -1.0f); -1.0f); 0.0f);

20

N TT NGHIP______________________________________________________________________________________}

Hnh 1.5 : Qu trnh Render mu sc ca vt liu

1.3.4. Kh nng to hiu ng nh sng OpenGL trong chng trnh m phng. Cho ph p to ra hiu ng nh sng nh trong thc t to nn cm gic tht cho cc m hnh v khung cnh 3 chiu.void COpenGLView::SetupLighting () { //Material Properties GLfloat matSpecular[] = { 1.0f, 0.0f, 0.0f, 1.0f}; GLfloat matShininess[] = { 50.0f}; GLfloat matAmbient[] = { 0.25f, 0.25f, 0.25f, 1.0f}; GLfloat matDiffuse[] = { 0.5f, 0.5f, 0.5f, 1.0f}; glMaterialfv(GL_FRONT, GL_SPECULAR, matSpecular); glMaterialfv(GL_FRONT, GL_SHININESS, matShininess); glMaterialfv(GL_FRONT, GL_DIFFUSE, matDiffuse); glMaterialfv(GL_FRONT, GL_AMBIENT, matAmbient); //Lighting Parameters //Enable Lighting glEnable(GL_LIGHTING); //Specify a single directional light GLfloat ambient1[] = { 0.5f,0.5f,0.5f};

21

N TT NGHIP______________________________________________________________________________________GLfloat diffuse1[] = { 0.5f,0.5f,0.5f}; GLfloat specular1[] = { 1.0f,0.0f,0.0f}; GLfloat position1[] = { 0.0f,0.0f,5.0f,0.0}; glLightfv(GL_LIGHT0, glLightfv(GL_LIGHT0, glLightfv(GL_LIGHT0, glLightfv(GL_LIGHT0, GL_AMBIENT, ambient1); GL_DIFFUSE, diffuse1); GL_SPECULAR, specular1); GL_POSITION, position1);

glEnable(GL_LIGHT0); //Specify a single positional spotlight GLfloat ambient2[] = { 1.0f,1.0f,0.0f}; GLfloat diffuse2[] = { 1.0f,0.0f,0.0f}; GLfloat position2[] = { 1.0f,0.0f,5.0f,1.0}; GLfloat direction2[] = {0.0f,0.0f,-5.0f}; glLightfv(GL_LIGHT1, GL_AMBIENT, ambient2); glLightfv(GL_LIGHT1, GL_DIFFUSE, diffuse2); glLightfv(GL_LIGHT1, GL_POSITION, position2); glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, direction2); glLightf(GL_LIGHT1, GL_SPOT_CUTOFF, 15.0f); glEnable(GL_LIGHT1); }

Hnh 1.6: Qu trnh Render mu sc ca vt liu

1.3.5. Kh nng to khung cnh m phng thc t OpenGL. 22

N TT NGHIP______________________________________________________________________________________

H tr cc k thut to cc khung cnh ging vi thc t nh k thut dn nh (texture mapping ) to cc khung cnh thc t, k thut sng m (fog) cho ph p to hiu ng hnh nh m dn khi i tng chuyn ng xa khi m t nhn. K thut trn mu (Blending) cho ph p to cc vt th trong m c th nhn xuyn qua c. K thut loi b rng ca (Antialiasing). to thnh cc Texture Mapping th cc lnh nh sau s thc thi trong OpenGL.void COpenGLView::LoadTexture (CString fileName, int texName) //Load Texture AUX_RGBImageRec* m_texture; m_texture = auxDIBImageLoad((const char*)fileName); if(!m_texture) { MessageBox("Picture could not be loaded"); exit(1); } glBindTexture(GL_TEXTURE_2D, m_Texture[texName]); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, m_texWrap); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, m_texWrap); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, m_texFilter); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, m_texFilter); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, m_texMode); gluBuild2DMipmaps(GL_TEXTURE_2D, 3, m_texture->sizeX,m_texture->sizeY, GL_RGB, GL_UNSIGNED_BYTE, m_texture->data); } void COpenGLView::RenderScene () { glTranslatef(0.0f,0.0f,-5.0f); glRotatef(m_xRot,1.0f,0.0f,0.0f); glRotatef(m_yRot,0.0f,1.0f,0.0f); glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D,m_Texture[0]); //Front Face glBegin(GL_POLYGON); glTexCoord2f(0,0); glVertex3f(-1.0f,-1.0f,0.0f); glTexCoord2f(1,0); glVertex3f( 1.0f,-1.0f,0.0f); glTexCoord2f(1,1); glVertex3f( 1.0f, 1.0f,0.0f); glTexCoord2f(0,1); glVertex3f(-1.0f, 1.0f,0.0f); glEnd(); ... Back face glBindTexture(GL_TEXTURE_2D,m_Texture[1]); ...Left and Right Faces glBindTexture(GL_TEXTURE_2D,m_Texture[2]); ...Top and Bottom faces

23

N TT NGHIP______________________________________________________________________________________glDisable(GL_TEXTURE_2D); }

Hnh1.7 : Qu trnh Texture Mapping trn OpenGL.Qu trnh Blending : ::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); GLfloat matSpecular[] = { 1.0f, 0.0f, 0.0f, 0.5f}; GLfloat matAmbient[] = { 0.25f, 0.25f, 0.25f, 0.5f}; GLfloat matDiffuse[] = { 0.5f, 0.5f, 0.5f, 0.5f};

24

N TT NGHIP______________________________________________________________________________________

Hnh1.8 : Qu trnh Blending mu sc ca vt liu trn OpenGL

Hiu ng sng m::glFogi(GL_FOG_MODE, GL_EXP); GLfloat fog_color[4] = {0.2f,0.2f,0.2f,0.0f}; ::glFogfv(GL_FOG_COLOR, fog_color); ::glFogf(GL_FOG_DENSITY, 0.25);

25

N TT NGHIP______________________________________________________________________________________

Hnh1.9 : Qu trnh to hiu ng sng m trn OpenGL.

1.3.6. Kh nng ci thin tc OpenGL. Cho ph p ci thin tc hin th b ng k thut danh sch hin th (display list). 1.3.7. Kh nng chn cc i tng ho (selection and hitting derect). K thut ny cho ph p chn cc i tng ho 3 chiu v ng dng trong k thut m phng va trm ca cc vt th. 1.4.Cc th vin h tr lp trnh OpenG . Ngoi cc th vin chun OpenGL nh GLU32.lib, OpenGL.lib, cn mt s th vin h tr lp trnh OpenGL. Nh cp trn OpenGL l mt th vin ho c chun ho. V vy cc chng trnh s dng cc hm OpenGL c bn c kh nng tng thch vi cc chng trnh bin d ch trn cc h iu hnh khc nhau m khng cn sa i ho c ch sa khng ng k. Tuy nhin do OpenGL 26

N TT NGHIP______________________________________________________________________________________

c lp vi cc h thng giao din, nn cc chng trnh mun s dng OpenGL trn cc h iu hnh khc nhau th cn s dng cc th vin h tr giao tip giao din ng vi tng h iu hnh ring. V d cc chng trnh ho s dng OpenGL trn Microsoft Windows phi s dng th vin giao tip WGL, trn Apple Macintosh phi s dng th vin AGL, trn Unix / Linux. X Window system phi s dng th vin GLX... Phn giao tip ny phi ph hp vi tng h iu hnh khc nhau. Mt th vin giao tip khc, th vin GLUT (OpenGL Utility Toolkit ca tc gi Mark Kilgard ) gip to cc ng dng ho h tr cc giao din giao tip trn nhiu h iu hnh nh to cc ca s chng trnh, menu, s l u vo: bn phm, chut... Th vin ny c xy dng c lp vi nhiu h iu hnh do cc chng trnh ho s dng OpenGL v GLUT c kh nng tng thch cao trong cc h iu hnh h tr GLUT. Hin c phin bn trn tt c cc h iu hnh ch yu nh Microsoft Windows, Unix / Linux, X Window system, Apple Macintosh. Ngoi ra, cc th vin thng phm nh Open Inventer, Performer... c xy dng da trn OpenGL cung cp nhng thao tc phc tp hn nh: To cc khung cnh (Scene), giao tip vi ngi dng, kh nng trao i d liu ho vi cc phn mm ho khc... Nh c xy dng cc ng dng ho 3 chiu tr nn nhanh chng v d dng hn. c bit phin bn OpenInventer trn h iu hnh Linux ca hng SGI. 2. Cc bc tng quan khi xy dng ng dng ho vi th vin OpenG 2.1. Khi to mi trng h tr cho OpenGL. OpenGL l mt th vin ho c lp vi h thng giao din ca cc h iu hnh, do cc ng dng ho s dng OpenGL trn cc h iu hnh khc nhau u phi c mt qu trnh khi to thch hp vi cc hm x l ho ca OpenGL. Qu trnh ny c thc hin b ng vic gi mt s hm thch hp ca cc 27

N TT NGHIP______________________________________________________________________________________

th vin h tr giao tip vi OpenGL trong chng trnh ng dng. Qu trnh khi to bao gm: nh ngh a mt kiu cu trc d liu ho ph hp vi qun l thng tin v nh dng im nh v la chn cc thng s ph hp vi h thng. Cc thng s ny bao gm: kiu im nh (RGBA hay color index), b m hon i n hay k p (single/double buffer), phn gii mu s c, kh nng h tr b m chiu su (depth buffer), b m stencil(stencil buffer), b m hnh khc nhau: + iu khin Rendering(Control Rendering) Sau khi thit lp v la chn nh dng im nh ph hp vi tng h thng, tt c cc h thng u phi thc hin vic iu khin qu trnh t v (Rendering). Qu trnh ny thc hin cc vic sau: To v s dng ng cnh t v (rendering context), thc hin qu trnh ng b ho (synchronizing execution), hon i cc b m (swaping buffers), s dung cc phng h thng... + T v (rendering) l mt qu trnh to v hn th im nh hai chiu ln cc thit b kt xut ho nh: mn hnh my tnh, my in... t cc i tng ho ba chiu. + Ng cnh (context): Trong OpenGL, ng cnh l mt khi nim ch mt tp hp y cc bin trng thi ca OpenGL. + Bin trng thi: Cc trng thi trong OpenGL nh: nh dng im nh, mu s c, nh sng... u c iu khin b ng cc bin trng thi tng ng. + Ng cnh t v (rendering context): C th coi ng cnh t v ca OpenGL nh mt cng m tt c cc hm ca OpenGL phi i qua giao tip vi thit b ho phn cng. Ng cnh t v to ra nh dng im nh ging ht vi nh dng im nh ca ng cnh thit b (divice context) g n vi n. Tuy vy ng cnh t v 28 tch lu (accumulation buffer). Di y l kiu cu trc d liu ho trn cc h iu

N TT NGHIP______________________________________________________________________________________

khng ging vi ng cnh thit b . Mt ng cnh thit b lu gi cc thng tin ca GDI (Graphic Divice Interface), cn mt ng cnh t v lu gi cc thng tin ca OpenGL. V m t no , chc nng ca ng cnh t v i vi OpenGL cng ging nh chc nng ca ng cnh thit b i vi GDI. Mt chng trnh ng dng c th c nhiu ng cnh t v. + Qu trnh ng b ho: Qu trnh ny buc cc hm ca OpenGL hay cc hm ho ca h thng phi ch cho n khi hm trc c thc hin xong. iu ny c ngh a cc lnh ca OpenGL trc lnh ch ca h thng s c m bo c thc hin trc cc lnh ca h thng n m sau lnh ch . Ngc li cc lnh ca OpenGL pha sau lnh ch ca OpenGL ch c thc hin khi cc lnh ca h thng n m trc lnh ch ca OpenGL thc hin xong. + Hon i b m(Swaping buffer): Mc ch chnh ca cc chng trnh ho l th hin cc hnh nh trn mn hnh. Mt hnh nh chuyn ng cn c 24 hnh/giy. Cc hnh nh trc khi c a ln mn hnh v s c v ln b m trung gian, sau ton b hnh nh trn b m mi c a ra mn hnh cng mt lc. Nu h thng ch h tr mt b m, nhng phn v u ca khung hnh s tn ti trong sut 1/24 giy, nhng cc phn v sau ca khung hnh s b xo ngay khi va c v chun b cho khung hnh tip theo. Gii php nng cao cht lng im nh v hn ch nhc im trn l s dng b m k p. Khi hnh nh trn b m th nht c a ra mn hnh trong sut 1/24 giy, th cng lc, hnh nh cho khung hnh tip theo c v trn b m kia. Sau 1/24 giy th cc b m hon i v tr cho nhau. Qu trnh lin tc nh vy s gip ci thin cht lng ho. 2.2.Xy dng cc i tng 3 chiu (3D). Cng vic u tin khi to cnh trong OpenGL l xy dng cc m hnh 3 chiu.Mt s th vin m rng nh GLUT hay AUX cung cp thm cc i tng 29

N TT NGHIP______________________________________________________________________________________

3 chiu c bn khc nh: Hnh nn, hnh t din hnh thp nh din...Tuy nhin trong thc t cc i tng thc t ni chung v cc c cu my ni ring rt phc tp nhng cng c th xy dng t cc a gic nh c s. Vic xy dng i tng 3 chiu phc tp b ng OpenGL c thc hin nh sau : - Thit k cc m hnh 3 chiu b ng mt phn mm nh h tr thit k chuyn dng nh AutoCAD hay SolidWork, 3D Max.. - S dng cc lnh trong cc phn mm xut i tng 3 chiu ra cc dng tp tin nh phn hay ASCII (American Standard Code for Information Interchange) c cha cc thng tin ca i tng di dng cc nh v quy t c ni cc nh thnh a gic. V d cc tp tin *.BDF, *.SLT,*.NVT - c thng tin cc i tng t cc tp tin v s dng cc hm v i tng c bn ca OpenGL xy dng li i tng 3 chiu c bn ban u. V vy y chnh l c s cho xy dng cc bi ton m phng hot ng ca ROBOT.

Hnh 1.10: Cc di tng 3D c xy dng li trn OpenGL.

30

N TT NGHIP______________________________________________________________________________________

Hnh 1.11: Qu trnh Render mu sc ca vt liu 2.3 .Quan st cc i tng 3 chiu Quan st cc i tng l mt khi nim cho ph p cc i tng hnh hc 3 chiu hin th ln mn hnh my tnh (hai chiu ) vi hiu ng khng gian ba chiu. Quan st i tng gm cc thao tc: Xc inh v tr quan st, hng quan st, phm vi quan st, xc nh v tr cc i tng trong khng gian ba chiu, chn cc ph p chiu, chn khung nhn vv. Qu trnh chuyn cc i tng ba chiu trong khng gian ba chiu thnh cc im nh trn mn hnh my tnh c th chia lm cc bc:

31

N TT NGHIP______________________________________________________________________________________

+ Cc ph p bin i: bin i v tr quan st hay v tr ca vt quan st. V OpenGL xy dng vt th trn m hnh khng gian 3 chiu nn cc ph p bin i s c thc hin thng qua vic thc hin cc ph p ton trn ma trn. Qu trnh thc hin bin i s din ra nh sau: Sau khi ta khai bo vt th thng qua cc vertex, ta c c cc im trong khng gian 3 chiu vi ta di dng vector 4 phn t. thc hin di chuyn, quay, phi cnh,.. ta cn p vo cc thng s nh gc quay, di di... tng ng vi thay i mun thc hin. OpenGL s dng cc thng s bin i m ta nhp vo (c lu tr di dng ma trn 4x4) v thc hin cc ph p ton bin i trn cc vector nhp vo. Kt qu l ta cc vertex m chng ta nhp s thay i tng ng. chn ma trn no s c thay i (mun thc hin ph p bin i no), ta dng hm :void glMatrixMode(GLenum mode)

Mode c th l: GL_MODELVIEW GL_PROJECTION GL_TEXTURE Cc ph p ton ma trn sau s tc ng ln ma trn modelview Cc ph p ton ma trn sau s tc ng ln ma trn projection Cc ph p ton ma trn sau s tc ng ln ma trn texture

Sau khi gi hm ny v a tham s tng ng, ma trn c chn s tr thnh ma trn bin i hin hnh v mi hm bin i tng ng s tc ng ln ma trn . a mt ma trn bin i hin hnh v ma trn n v , dng hm:void glLoadIdentity(void)

a gi tr mi vo cho ma trn bin i hin hnh, dng hm:void glLoadMatrix*()

p cc php bin i trc tip khi gi hm th ta cung cp mt ma trn v gi glMulMatrix*() vi tham s l ma trn bin i. Hm ny s nhn ma trn tham s vo ma trn bin i hin hnh (v d ma trn tham s l v ma trn bin i

32

N TT NGHIP______________________________________________________________________________________

hin hnh l C th sau khi nhn, kt qu ma trn hin hnh l C ). Ch : khi lp trnh OpenG trong C, khi khai bo ma trn 4x4 thc hin thay i ma trn bin i hin hnh th M[i][j] ch v tr phn t ct i hng j, khc vi quan nim thng thng trong C l hng i ct j, trnh nhm ln, tt nht l khai bo mng 16 phn t

+ Chn cc ph p chiu: trc giao hay phi cnh. - Ph p chiu trc giao : Vt th gn ng knh ( y l im nhn) th thy ln v ngc li. OpenGL cho ta mt hm xc nh khng gian nhn.

Hnh 1.12: Php chiu trc giao

void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far);

- Ph p chiu phi cnh: Cc ng thng song song trong khng gian th khi th hin ln mn hnh cng s song song. Ni cch khc, khng gian nhn c xc nh bi mt hnh hp ch nht. thit lp ch quan st ny, ta dng hmvoid glOrtho(GLdouble left, GLdouble GLdouble near, GLdouble far); right, GLdouble bottom,GLdouble top,

33

N TT NGHIP______________________________________________________________________________________

Hnh 1.13: Php chiu phi cnh Cc tham s c ngh a tng t nh hm glFrustum(). Khi ch cn chiu hnh 2 chiu, c th gi void glOrtho2D(). Hm ny ch nhn 4 tham s u c ngh a ging glOrtho(), nhng khi hp khng gian nhn c gi tr z dao ng trong on [-1.0,1.0]. Tuy nhin, v l hnh 2 chiu nn gi tr z lun b ng 0 v do khng b mt hnh. + Chn khung nhn: (Viewport) Viewport l mt khung hnh ch nht trong ca s chng trnh v. N l ni m vt th s c v vo (c th c kch thc nh hn, b ng ho c ln hn kch thc ca s chng trnh). Hm void glViewport(GLint x, GLint y, GLsizei width, GLsizei height) xc nh mt khung nhn c ta gc tri di l (x,y) so vi gc tri di ca ca s v c tnh b ng pixel; width v height xc nh kch thc ca khung nhn. M c nh, viewport c kch thc b ng kich thc ca s . T l gia chiu di v chiu rng ca viewport nn b ng vi t l tng ng trong khng gian nhn m ta xc nh thng qua cc hm glFrustum() ho c glOrtho(), nu khng hnh nh s b bin dng

34

N TT NGHIP______________________________________________________________________________________

+ S bin i v tr quan st v v tr vt th.

Do s bin i v tr quan st v v tr vt th c lin quan tng i vi nhau nn trong OpenGL chng c gom vo mt ma trn bin i (ch dnh cho vt th). M c nh ban u l im nhn v vt th chung mt ch ti gc h trc ta v phng nhn theo hng m ca trc z (hng vo bean trong mn hnh).

Hnh 1.14: H ta d chun trongOPENGL OpenGL cung cp 3 hm thay i gc nhn v hng nhn: glTranslate*() (di chuyn), glRotate*() (quay), glScale*() (dng k o dn ho c co nh vt th). Cc hm ny tc ng ln ta vt th. Cc thnh phn ca hm glTranslate():void glTranslate{fd} (TYPE x, TYPE y, TYPE z): di vt th i mt on x, y, v z theo phng cc trc ta tng ng.

Cc thnh phn ca hm glRotate() :void glRotate{fd}(TYPE angle, TYPE x, TYPE y, TYPE z): quay vt th 1 gc angle theo chiu ngc chiu kim ng h quanh trc c vector ch phng xc nh t gc trc to (0,0,0) v im (x,y,z).V d: glRatated(45,0,0,1);

Cc thnh phn ca hm glScale():void glScale{fd}(TYPEx, TYPE y, TYPEz): co dn vt th theo cc phng Ox, Oy, Oz mt lng tng ng. Nu x hoc y hoc z m th vt th s b lt li i xng theo trc c gin m.V d: glScalef(2.0,-0.5,1.0);

35

N TT NGHIP______________________________________________________________________________________

Hnh 1.15: Cc php bin i trong OpenGL

-

To chuyn ng cho cc i tng.

Nguyn t c chung to cc hnh nhchuyn ng l v v xo lin tc cc v tr khc nhau ca i tng chuyn ng. Vic phn tch, tnh ton v tr cc vt r n thuc c h phi c thc hin trc khi m phng. Qu trnh m phng thc hin v cc v tr c tnh ton trc. Khng nn thc hin song song va v, va tnh ton i vi cc chuyn ng i hi tnh ton phc tp ho c cu hnh my tnh khng cao. Chuyn ng ca cc vt r n c cp nhp theo thi gian v vy vic tnh ton cc v tr cng phi c cp nhp theo thi gian. Theo l thuyt h nhiu vt, v tr ca mt vt r n trong m t phng ho c trong khng gian c th xc nh b ng cc ma trn csin ch phng so vi h to c nh. Trong OpenGL v tr ca i tng cng c thay i b ng ph p nhn cc to ca i tng vi ma trn hin hnh. Gi tr ca cc ma trn hin hnh c bin i b ng cc ph p bin hnh nh : t nh tin, quay.3. Gii thiu v ngn ng lp trnh Visual C++ v cc ng dng ca FC. 36

N TT NGHIP______________________________________________________________________________________

Visual C++ l mt trong cc ngn ng lp trnh thuc dng Visual Studio ca hng Microsoft, pht trin da trn nn tng l ngn ng lp trnh hng i tng C++. Visual C++ ra i khong nhng nm 1990 v cng ngy cng c s dng rng ri nht l cc ng dng trong k thut nh l lp trnh nhng,lp trnh iu khin v lp trnh m phng. Vic to ra cc giao din phc tp v trnh by p i vi Visual C++ kh l n gin, v y chnh l th mnh ca Visual C++ trong vic tr gip c lc cho ngi lp trnh khi xy dng nhng d n ln ho c trong k thut lp trnh h thng. MFC l lp nn tng ca Microsoft (Microsoft Foundation Classes), l mt cng c mnh trong lp trnh ng dng cho hu ht cc l nh vc v n c giao din p ng mi nhu cu ca ngi s dng trong vic thit k cc giao din ca chng trnh m phng.

37

N TT NGHIP______________________________________________________________________________________

CHNG 2 XY DNG CHNG TRNHCc bc xy dng bi ton m phng gm c: - Cch to ra project MFC thc hin qu trnh m phng. - Khi to cc gi th vin ca OpenGL. - Thit k m hnh trn Solidworks. - Chuyn m hnh sang tp tin *.STL. - Xy dng Module c File *.STL. - Xy dng Module c File qu o s ha trn AutoCAD. - Chy file qu o s ha trn AutoCAD. - M phng trn OpenGL. 2.1 Cch to ra mt Project FC m phng hot ng

PHNG

+ Nh chng 1 em trnh by v phn mm Visual 6.0 by gi ta to 1 Project MFC nh sau : - Chn File -> New sau chn Tab Projects v s hin ra cc Project c lp trnh trn Visual C++ 6.0. y ta chn loi MFC AppWizard(exe).Trong Project name ta g tn ca d n y l DoanTinhoc nh hnh v

38

N TT NGHIP______________________________________________________________________________________

Hnh 2.1 : Bt u thit lp project MFC

Cc bc tip theo thit lp project nh sau : Bc 1 : Chn Single Document Interface : y l loi giao din n ti liu ti mt thi im, ch c 1 ti liu c m v hin hnh, cho ngi dng thao tc trn n.Trong n tin hc ny ch yu l m phng hot ng ca Rbt nn ta s dng kiu n ti liu.

39

N TT NGHIP______________________________________________________________________________________

Hnh 2.2 : Thit lp 1

Bc 2 : Ta chn nh hnh v di v do ng dng khng s l D liu nn Database Support ta chn None.

40

N TT NGHIP______________________________________________________________________________________

Hnh 2.3 : Thit lp 2

Bc 3 : Ta chn nh hnh v di y - Chn None v trong ng dng khng s dng ti liu phc hp.

Hnh 2.3 : Thit lp 2

H

2.4 : T

3

Bc 4 : n bc s 4 ta chn cc thit lp sau : - Docking Toolbar : Yes - Chn thanh cng c c g n vo ca s . - Initial Status Bar : Yes - Chn thanh trng thi c g n vo ng dng - Printing and Printer Preview : No Khng in n g - 3D controls : Yes C iu khin ni 41

N TT NGHIP______________________________________________________________________________________

- Toolbars look : Normal Dng thanh cng c bnh thng.

Hnh 2.3 : Thit lp 4 Bc 5 : Chn cc thit lp nh sau : - MFC Standard : dng chun ca MFC - MFC Library : As a shared DLL Th vin ca MFC c chia s th vin lin kt ng.

42

N TT NGHIP______________________________________________________________________________________

Hnh 2.6 : Thit lp 5

Bc 6 : Finish Hon tt vic thit lp.

43

N TT NGHIP______________________________________________________________________________________

Hnh 2.7 : Hon thnh thit lp Project MFC Sau khi khi to xong ta chy th chng trnh th thu c giao din ca 1 project MFC c bn nh hnh v di y.

44

N TT NGHIP______________________________________________________________________________________

Hnh 2.8 : Chy th Project MFC

Nh vy c th thy r MFC lm g cho ta .M c d cha xy dng code chng trnh nhng MFC cung cp sn giao din ca mt ng dng chun trong mi trng Windows.M Visual C++ l mt ngn ng lp trnh hng i tng, cho nn mi ng dng u c xy dng trn c s ca cc lp.Khi mt ng dng c to ra n c cc lp c s sau :

Hnh 2.9 : Cc lp ng dng trong MFC

Chc nng ca cc lp c s ca ng dng MFC nh sau : - CApp : l lp ng dng (Applicatiton Class) c nhim v l khi to v chy ng dng. - CDoc : l lp ti liu (Document Class) ca ng dng, c nhim v np v duy tr 1 ti liu. Mt ti liu c th l bt c ci g,t mt bn tho cho n cc vic ci t ca mt thit b mng Tuy nhin, mc ch s dng ca chng trnh l m phng nn khng cn quan tm nhiu n lp ny. 45

N TT NGHIP______________________________________________________________________________________

- CView: l lp hin th ca ng dng (View Class),c nhim v cung cp mt hay nhiu View (khung) cho ti liu.Trong chng trnh m phng ta s cn s dng rt nhiu trong lp ny khi to cho OpenGL v cc thao tc v li trn lp ny. - CmainFrame: l lp khung (Frame Class) ca ng dng v c nhim v hin th v truyn lnh ca ngi dng. 2.2- Khi to v Thit lp cc gi th vin ca OpenGL Mc ch chnh ca chng trnh l m phng qu trnh hot ng ca Robot, v vy cn thit phi c mt mi trng ha.Khi mi to ra mt d n MFC th ng dng ch cung cp cho ta khung giao din chun dng ca s,v mi trng lm vic ch yu l thao tc vi CSDL.Do chng ta cn phi tin hnh khi to mt mi trng ha, c th trong n ny em dng OpenGL. Cng gin nh GDI cn mt ng cnh thit b (Device Context DC ) v, OpenGL cng cn c mt ng cnh biu din (Rendering Context RC) .Tuy nhin, khng ging nh GDI l mi lnh GDI yu cu mt DC v, th OpenGL li dng khi nim mt RC hin hnh. Khi mt ng cnh biu din c hin hnh trong mt thread (lung), mi li gi OpenGL trong thread s s dng cng mt ng cnh biu din hin hnh.Trong khi rt nhiu ng cnh biu din c th, c s dng v vo trong mt ca s n, th ch c mt ng cnh duy nht c hin hnh ti mt thi im trong thread n. to ra v hin hnh mt ng cnh biu din OpenGL c 3 bc c bn nh sau : Bc 1 : Ta phi nh dng im nh . Bc 2 : Ta phi to ng cnh biu din . Bc 3 : Lm cho ng cnh biu din hin hnh.

46

N TT NGHIP______________________________________________________________________________________

Qua 6 bc c bn trn ta to ra c 1 Project MFC, m phng c cc hot ng ca Rbt th ta phi thit lp mi trng ha.

Hnh 2.10 : Thit lp cc gi th vin OpenGL to c ng cnh biu din ca OpenGL th trc tin ta phi include(bao gm) tt c cc tp th vin ca OpenGL vo trong Project ny. T thanh Menu chnh ca chng trnh Visual C++ 6.0 ta chn Project -> Settings sau chn Tab l Link , chn category l General v nhp vo hp thoi Object/library modules l : opengl32.lib glu32.lib glaux.lib nh hnh v trn v chn nt OK. Sau ta m tp stdafx.h ra v thm vo cc dng code sau :#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers #include // MFC core and standard components #include // MFC extensions //-----------------------------------------------------------------------// Cc a m thm vo y . #include //OpenGL Main Library Header #include //OpenGL Utility Library Header #include //-----------------------------------------------------------------------

47

N TT NGHIP______________________________________________________________________________________#include // MFC Automation classes #include // MFC support for Internet Explorer 4 Common Controls #ifndef _AFX_NO_AFXCMN_SUPPORT #include // MFC support for Windows Common Controls #endif // _AFX_NO_AFXCMN_SUPPORT

Open

GL

yu

cu

ca v

s

phi

c cn

kiu phi

WS_CLIPCHILDREN thm vo

v hm

WS_CLIPSIBLINGS

vy

PreCreateWindow(CREATESTRUCT& cs) ca lp CDoanTinhocView nh sau :BOOL CDoanTinhocView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs cs.style |= (WS_CLIPCHILDREN | WS_CLIPSIBLINGS); return CView::PreCreateWindow(cs); }

By gi chng ta s thc hin bc th nht, to nh dng im nh. nh dng im nh s miu t cch lu tr trong b nh cc phn t ha m Windows hin th .Thng s c iu khin bi nh dng im nh bao gm su mu, phng php b m v giao din ha c h tr. u tin to mt protected member function trong lp CDoanTinhocView c tn l BOOL CDoanTinhocView::SetWindowPixelFormat(HDC hDC) c ni dung nh sau ://------------------------------------------- Code here -----------------------------// BOOL CDoanTinhocView::SetWindowPixelFormat(HDC hDC) { PIXELFORMATDESCRIPTOR pixelDesc; pixelDesc.nSize = sizeof(PIXELFORMATDESCRIPTOR); pixelDesc.nVersion = 1; pixelDesc.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER; pixelDesc.iPixelType = PFD_TYPE_RGBA; pixelDesc.cColorBits = 32; pixelDesc.cRedBits = 0; pixelDesc.cRedShift = 0; pixelDesc.cGreenBits = 0; pixelDesc.cGreenShift = 0; pixelDesc.cBlueBits=0; pixelDesc.cBlueShift=0; pixelDesc.cAlphaBits=0; pixelDesc.cAlphaShift=0; pixelDesc.cAccumBits=0; pixelDesc.cAccumRedBits=0; pixelDesc.cAccumGreenBits=0; pixelDesc.cAccumBlueBits=0; pixelDesc.cAccumAlphaBits=0;

48

N TT NGHIP______________________________________________________________________________________pixelDesc.cDepthBits=32; pixelDesc.cStencilBits=0; pixelDesc.cAuxBuffers=0; pixelDesc.iLayerType= PFD_MAIN_PLANE; pixelDesc.bReserved=0; pixelDesc.dwLayerMask=0; pixelDesc.dwVisibleMask=0; pixelDesc.dwDamageMask=0; m_GLPixelIndex = ChoosePixelFormat( hDC,&pixelDesc); if (m_GLPixelIndex==0) { m_GLPixelIndex = 1; if(DescribePixelFormat(hDC,m_GLPixelIndex,sizeof(PIXELFORMATDESCRIPTOR), &pixelDesc)==0) { return FALSE; } } if (SetPixelFormat( hDC,m_GLPixelIndex,&pixelDesc)==FALSE) { return FALSE; } return TRUE; glCullFace(GL_BACK);

// }

Tip theo chng ta thm vo protected member variable trong lp CDoanTinhocView:int m_GLPixelIndex; // protected variable

Sau , m ClassWizard, thm vo hm OnCreate p ng thng bo VM_CREATE nh sau:

49

N TT NGHIP______________________________________________________________________________________

Hnh 2.11 : Chn hm Oncreate() thit lp OpenGL

Sau khi cc nh dng im c thit lp, tt c nhng g chng ta cn lm by gi l to ra mt ng cnh biu din v lm cho n hin hnh. B t u thm vo mt protected member function vo lp CDoanTinhocView c tn l ://----------------------------------------------------------------------// BOOL CDoanTinhocView::CreateViewGLContext(HDC hDC) { m_hGLContext= wglCreateContext(hDC); if(m_hGLContext == NULL) return FALSE; if (wglMakeCurrent(hDC,m_hGLContext)== FALSE) return FALSE; return TRUE; } //------------------------------------------------------------------------//

v ta thm bin thnh vin protected member variable vo trong lp CDoanTinhocView nh sau :protected: HGLRC m_hGLContext;

50

N TT NGHIP______________________________________________________________________________________

V sau sa li m lnh trong hm OnCreate nh sau :int CDoanTinhocView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; // TODO: Add your specialized creation code here HWND hWnd = GetSafeHwnd(); HDC hDC = ::GetDC(hWnd); if (SetWindowPixelFormat(hDC)==FALSE) return 0; // new code if(CreateViewGLContext(hDC) == FALSE) return 0; // return 0; }

Tip theo ta thm vo hm OnDestroy p ng thng bo WM_DESTROY hy b ng cnh biu din khi chng trnh kt thc nh sau :

Hnh 2.12 : Chn hm OnDestroy() hy OpenGL

V m lnh ca n nh sau : 51

N TT NGHIP______________________________________________________________________________________//------------------------------------------------------------------------// void CDoanTinhocView::OnDestroy() { if(wglGetCurrentContext()!=NULL) wglMakeCurrent(NULL,NULL); if( m_hGLContext!=NULL) { wglDeleteContext(m_hGLContext); m_hGLContext=NULL; } CView::OnDestroy(); } //-----------------------------------------------------------------------------//

Sau ta ch nh li m lnh ca cu t CDoanTinhocView() nh sau :CDoanTinhocView::CDoanTinhocView() { // TODO: add construction code here m_hGLContext = NULL; m_GLPixelIndex = 0; }

Nh vy ta tin hnh xong qu trnh khi to, ti ra mi trng ha c th thc hin cc thao tc m phng.Bc tip theo,chng ta s tm hiu lm th no thc hin c mt chng trnh m phng n gin.Sau khi thc hin cc thao tc trn th nu chy chung trnh th v n cha c g, m c d OpenGL c khi to. l do chng ta cha to ra Viewport v thit lp cc Matrix Mode. thc hin iu ny, ta s dng ClassWizard, thm vo hm OnSize, p ng thng bo WM_SIZE

52

N TT NGHIP______________________________________________________________________________________

Hnh 2.13 : Chn hm OnSize() thit lp cc ng dng OpenGL v sa li m lnh nh sau ://----------------------------------------------------------------------------// void CDoanTinhocView::OnSize(UINT nType, int cx, int cy) { CView::OnSize(nType, cx, cy); GLsizei width,height; GLdouble aspect; width = cx; height =cy; if (cy==0) aspect=(GLdouble)width; else aspect=(GLdouble)width/(GLdouble)height; glViewport(0,0,width,height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45,aspect,1.0f,1000.0f); // Phep chieu truc giao phoi canh // gluOrtho2D(0.0,500.0*aspect,0.0,500.0); glMatrixMode(GL_MODELVIEW); // Ma tran chieu de mo phong hoat dong cua ROBOT glLoadIdentity(); glEnable(GL_DEPTH_TEST); // Enable Depth Testing } //----------------------------------------------------------------------------------//

53

N TT NGHIP______________________________________________________________________________________

Hm glViewport (0,0,width,height) to ra mt khung nhn hnh ch nht c to nh tri di l (0,0) v ta ca nh phi trn l (width,height).Hm glMatrixMode(GL_PROJECTION) chn kiu ma trn l GL_PROJECTION(ma trn chiu). Sau glLoadIndentity() np li ma trn n v m c nh cho ma trn hin hnh (ma trn chiu va c chn bi hm glMatrixMode(GL_PROJECTION)). Hm gluOrtho2D nh ngh a mt ma trn chiu ph p chiu trc giao 2D, vi kch thc l cc tham s truyn vo.Tng t, hai hm cn li l chn v thit lp cho ma trn quan st m hnh. Sau li s dng ClassWizard thm vo hm OnPaint p ng li thng bo WM_PAINT nh sau :

Hnh 2.14 : Chn hm OnPaint() v cc i tng OpenGL

54

N TT NGHIP______________________________________________________________________________________

V m lnh nh sau ://----------------------------------------------------------------------------------// void CDoanTinhocView::OnPaint() { CPaintDC dc(this); // device context for painting //------------------------------------------------------------------------------// glLoadIdentity(); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glTranslatef(0.0f,0.0f,-6.0f); glRotatef(-45.0f,0.0f,1.0f,0.0f); glRotatef(30.0f,1.0f,0.0f,-1.0f); glBegin(GL_QUADS); // mat thu nhat glColor3f(0.0f,1.0f,0.0f); glVertex3f(1.0f,1.0f,-1.0f); glVertex3f(-1.0f,1.0f,-1.0f); glVertex3f(-1.0f,1.0f,1.0f); glVertex3f(1.0f,1.0f,1.0f); // mat thu hai glColor3f(1.0f,0.5f,0.0f); glVertex3f(1.0f,-1.0f,1.0f); glVertex3f(-1.0f,-1.0f,1.0f); glVertex3f(-1.0f,-1.0f,-1.0f); glVertex3f(1.0f,-1.0f,-1.0f); // mat thu ba glColor3f(1.0f,0.0f,0.0f); glVertex3f(1.0f,1.0f,1.0f); glVertex3f(-1.0f,1.0f,1.0f); glVertex3f(-1.0f,-1.0f,1.0f); glVertex3f(1.0f,-1.0f,1.0f); // mat thu tu glColor3f(1.0f,1.0f,0.0f); glVertex3f(1.0f,-1.0f,-1.0f); glVertex3f(-1.0f,-1.0f,-1.0f); glVertex3f(-1.0f,1.0f,-1.0f); glVertex3f(1.0f,1.0f,-1.0f); // mat thu nam glColor3f(0.0f,0.0f,1.0f); glVertex3f(-1.0f,1.0f,1.0f); glVertex3f(-1.0f,1.0f,-1.0f); glVertex3f(-1.0f,-1.0f,-1.0f); glVertex3f(-1.0f,-1.0f,1.0f); // mat thu sau glColor3f(1.0f,0.0f,1.0f); glVertex3f(1.0f,1.0f,-1.0f); glVertex3f(1.0f,1.0f,1.0f); glVertex3f(1.0f,-1.0f,1.0f); glVertex3f(1.0f,-1.0f,-1.0f); // glBegin(GL_POLYGON); /* glColor4f(1.0f,0.0f,0.0f,1.0f); glVertex2f(100.0f,50.0f); glColor4f(0.0f,1.0f,0.0f,1.0f);

55

N TT NGHIP______________________________________________________________________________________glVertex2f(450.0f,400.0f); glColor4f(0.0f,0.0f,1.0f,1.0f); glVertex2f(450.0f,50.0f); */ glEnd(); // glFlush(); SwapBuffers(dc.m_ps.hdc); } //----------------------------------------------------------------------------------//

By gi nu chy chng trnh ta s thy c 1 s thay i.Tc l tan b vng WorkSpace chuyn sang mu en, n chnh l mu m c nh ca OpenGL.

Hnh 2.15 : Chy th project OpenGL

56

N TT NGHIP______________________________________________________________________________________

Sau khi to c 1 project OpenGL ri, ta tin hnh xy dng mt khi lp phung v c th chuyn ng c trong h trc to OXYZ m c th y l c th quay quanh trc Z (trc thng ng). Bi ton c t ra l khi lp phng quay quanh trc Z vi 1 gc c th thay i c v ta gi gc ny l alpha, v gc ny s thay i lin tc theo thi gian v hnh lp phng s c v xa lin tc.Vi tc s l nhanh ca OpenGL th ngi dng s cm nhn c hnh lp phng ang quay quanh trc Z ca n.Vn l ci g s lm thay i alpha mt cch u n ? Khng ging nh trong lp trnh Pascal hay C/C++, mi trng m cc ng dng lp trnh b ng Visual C++ hot ng l Windows, vi c ch x l v hot ng theo cc thng bo (Message).Do vy dng cc vng l p for hay while n rt d pht sinh ra li v lm treo chng trnh. Trong Visual C++ c h tr Timer nn ta dng n thay i gi tr ca alpha theo mt khong thi gian nh sn.u tin ta thm vo mt bin alpha, nhp chut phi vo lp CDoanTinhocView,chn Add Member Variable.S c 1 ca s hin ra nh sau :

Hnh 2.16 : Thm bin vo Project MFC Sau ta nhp vo Variable Type c kiu l float, Variable Name l alpha, chn kiu truy cp l Protected, ri nhn OK .Bin alpha s c thm vo .float alpha; // Them vao bien alpha

57

N TT NGHIP______________________________________________________________________________________

Trong cu t CDoanTinhocView::CDoanTinhocView() ta gn gi tr khi u cho bin alpha nh sau :CDoanTinhocView::CDoanTinhocView() { // TODO: add construction code here m_hGLContext = NULL; m_GLPixelIndex = 0; alpha = 0.0f; }

Dng ClassWizard thm vo OnTimer p ng thng bo WM_TIMER :

Hnh 2.17 : Chn hm OnTimer() thit lp thi gian chy OpenGL

V sau ta sa li m lnh nh sau:void CDoanTinhocView ::OnTimer(UINT nIDEvent) {

58

N TT NGHIP______________________________________________________________________________________alpha +=0.5f; SendMessage(WM_PAINT,0,0); CView::OnTimer(nIDEvent);

}

V sau trong hm OnPaint() thm vo lnh .glRotatef(alpha,0.0f,1.0f,0.0f);

Cui cng, trong hm OnCreate, thm lnh khi to Timer , vi thi gian l p l 1ms.SetTimer(ID_TIMER,1,NULL);

V ID_TIMER cha c khai bo, nn ta vo View\Resource Symbol nh sau :

Hnh 2.18 : Thit lp cho hm OnTimer()

59

N TT NGHIP______________________________________________________________________________________

Bm vo New v c 1 ca s hin ta ta nhp vo ID_TIMER trong Name ri bm OK.Sau bm vo Close kt thc chng trnh.

Hnh 2.19 : Thit lp New Symbol

Trong qu trnh

kt thc hot ng, Timer cn phi hy do trong hm

OnDestroy ta thm vo dng lnh sau ://------------------------------------------------------------------------// void CDoanTinhocView::OnDestroy() { if(wglGetCurrentContext()!=NULL) wglMakeCurrent(NULL,NULL); if( m_hGLContext!=NULL) { wglDeleteContext(m_hGLContext); m_hGLContext=NULL; } KillTimer(ID_TIMER); // CView::OnDestroy(); }

//------------------------------------------------------------------------------//

By gi ta chy chng trnh, ta s thy hnh lp phng chuyn ng theo cc phng nh hnh v di y.

60

N TT NGHIP______________________________________________________________________________________

Hnh 2.20 : Chy th 1 chng trnh OpenGL

61

N TT NGHIP______________________________________________________________________________________

Nh vy, sau khi chy th thnh cng 1 project c to trn MFC v OpenGL th bc tip theo l chng ta phi i vo xy dng chng trnh m phng ca Robot sau khi thit k m hnh trn Solidworks v v li trn OpenGL theo qu o c tnh ton v s ha.

2.3 .Thit k m hnh Robot trn SolidWorks 2007.Khi thit k m hnh ca Robot trn Solidwork th mt iu rt quan trng l vic thit lp cc h ta cho m hnh ban u khi v li cc chi tit trn OpenGL th cc chi tit ko b nhy lung tung. y em chn h ta khi v trn Solidwork trng vi cc gc ta khi tnh ton ng hc.Cc chi tit c thit k trn Solidworks nh sau :

62

N TT NGHIP______________________________________________________________________________________

Hnh 2.21.M hnh phn ca Robot c thit k trn Solidwork

Hnh 2.22.M hnh Khu 1ca Robot c thit k trn Solidwork

63

N TT NGHIP______________________________________________________________________________________

Hnh 2.32.M hnh Khu 2 ca Robot c thit k trn Solidwork

64

N TT NGHIP______________________________________________________________________________________

Hnh 2.32.M hnh Khu 3 ca Robot c thit k trn Solidwork

65

N TT NGHIP______________________________________________________________________________________

Hnh 2.32.M hnh Khu 4 ca Robot c thit k trn Solidwork

66

N TT NGHIP______________________________________________________________________________________

Hnh 2.19 : Bn lp ghp y ca m hnh.

67

N TT NGHIP______________________________________________________________________________________

2.4 Xy dng

odule c File .*ST

2.4.1. Chuyn sang File .*STL + Sau khi ta thit k m hnh ca Robt trn Solidworks th cng vic tip theo l ta s chuyn n sang file c ui l .*STL v xy dng 1 chng trnh c cu trc ca File *.STL v v li n trn OpenGL. + Cch chuyn sang file STL theo cc bc nh sau : Bc 1 : Ta m m hnh c thit k b ng Solidworks sau t mc File -> Save As

Hnh 2.19 : Chuyn sang File *.STL

68

N TT NGHIP______________________________________________________________________________________

Sau s hin ra cc la chn nh sau : - Save in : l tn ca Folder cha file .*STL sau khi chuyn t Solidwork sang. File name : l tn ca File Save type : y ta chn save li l file dng .*STL . 1 iu ng ch y l ta chn nt Options ta nh dng file .*STL c dng l m ASCII nh hnh di. Bc 2 : La chn th mc v kiu file m ta mun chuyn .

H

2.27 : C y

R

s

.*STL

69

N TT NGHIP______________________________________________________________________________________

Bc 3 : Chn file STL sau khi chuyn sang c dng m ASCII . Khi thc hin bc ny th mt iu rt quan trong l ta phi chn vo : Do not translate STL output data to positive space cho h ta khi v trong Solidworks v khi chuyn sang file .*STL khng b d ch chuyn.

H

2.28 : C

d

f .* STL

ASCII

70

N TT NGHIP______________________________________________________________________________________

H

2.29 : C y

v

s

f

.*STL

Bc 4 : Hon tt vic chuyn sang file .*STL. Nh vy qua 4 bc ta chuyn 1 file t Solidworks sang file .*STL v vi cch lm tng t ta s chuyn tt c cc khu ca Robot sang file .*STL.

71

N TT NGHIP______________________________________________________________________________________

H

2.29 : C y

v

s

f

.*STL

2.4.2.Cu trc File *.STL + Phn tch cu trc ca File .*STL.solid CT1 facet normal 0.000000e+000 outer loop vertex 2.000000e+001 vertex 6.657395e+001 vertex 1.732051e+001 endloop endfacet facet normal 0.000000e+000 outer loop vertex 1.732051e+001 vertex 6.657395e+001 vertex 5.663119e+001 endloop endfacet facet normal 0.000000e+000 outer loop vertex 1.732051e+001 vertex 5.663119e+001 0.000000e+000 1.000000e+000 7.347881e-015 5.200000e+002 2.163119e+001 5.200000e+002 1.000000e+001 5.200000e+002 0.000000e+000 1.000000e+000 1.000000e+001 5.200000e+002 2.163119e+001 5.200000e+002 4.114497e+001 5.200000e+002 0.000000e+000 1.000000e+000 1.000000e+001 5.200000e+002 4.114497e+001 5.200000e+002

72

N TT NGHIP______________________________________________________________________________________vertex 1.000000e+001 endloop endfacet facet normal 0.000000e+000 outer loop vertex 1.732051e+001 vertex 6.657395e+001 vertex 2.000000e+001 endloop endfacet 1.732051e+001 5.200000e+002 0.000000e+000 1.000000e+000 -1.000000e+001 5.200000e+002 -2.163119e+001 5.200000e+002 7.347881e-015 5.200000e+002

File *.STL c cu trc nh sau : C sau 7 dng th File li c cu trc li l p li t u. Dng u tin trong File *.STL bao gi cng l tn ca chi tit m khi v ta t trn Solidworks.Sau n cc Vector php tuyn ca b m t cn v v ta ca 3 nh.Nh vy File *.STL s ha cc chi tit thnh rt nhiu b m t nh hn v cc nh tng ng vi n.T y ta c c s xy dng Module c File *.STL phc v qu trnh m phng. 2.4.3.Xy dng hm c file *.ST + Chng trnh c File *.STL Trong Module ny em xin trnh by 2 cch c File *.STL v v li trn mi trng ha OpenGL. Cch 1: Trong cch ny th hm ReadModel(GLint &model, string filename) s

lu ton b cc thng tin v cc vector php tuyn v cc nh vo glGenLists(1) v v li vi chu trnh l c 3 im s v thnh 1 b m t v chu trnh v c t trong 1 vng l p while cho n khi c ht File *.STL v v hon ch nh cc b m t ca chi tit th mi thi.Tuy nhin,cch ny vi s lng file *.STL nhiu th s lm cho chng trnh b nn em xin gii thiu cch th hai.#ifndef _READ_FILE_STL_H_ #define _READ_FILE_STL_H_ //#include "stdlib.h" #include "string" #include "fstream" using namespace std;

73

N TT NGHIP______________________________________________________________________________________void ReadModel(GLint &model, string filename) { model = glGenLists(1); if(model !=0) { GLdouble n[3], v[3][3]; ifstream ifs(filename.c_str()); // ifs.setmode(filebuf::binary); string str1, str2; //Start READ STL FILE getline(ifs, str1);//"solid ..." glNewList(model, GL_COMPILE); glBegin(GL_TRIANGLES); while(1) { //'face' OR 'endsolid' ifs>>str1; if(str1 == "endsolid") break; //n[0] n[1] n[2] ifs>>str1>>n[0]>>n[1]>>n[2]; getline(ifs, str1); //outer loop getline(ifs, str1); //Vertex1, Vertex2, Vertex3 for(int i=0; i>str1>>v[i][0]>>v[i][1]>>v[i][2]; getline(ifs, str1); } //Draw a triangle glNormal3dv(n); glVertex3dv(v[0]); glVertex3dv(v[1]); glVertex3dv(v[2]); //end loop getline(ifs, str1); //end face getline(ifs, str1); } glEnd(); glEndList(); ifs.close(); } } #endif _READ_FILE_STL_H_

Cch 2 : Trong cch ny th ta vit 1 hm c file *.STL .on u ca hm ReadFileSTL() l cc khai bo cc bin cc b, tip sau l n dng lnh :f=fopen("ROBOT.txt","rt");

74

N TT NGHIP______________________________________________________________________________________

H

2.29 : C y

v

s

f

.*STL

y chnh l 1 file *.txt cha trong th mc ca chng trnh v ni dung ca file l cha danh sch cc chi tit v trn Solidwork v chuyn sang file *.STL trong qu trnh m phng n s v li m hnh ca Robot. Tip theo l cc cu lnh if else while tin hnh kim tra file v c file

*.STL. Nu vic m File thnh cng th chng trnh s tin hnh c c tn ca cc tp s liu v v lu vo mng filechitiet[]. Kt thc vic c trong File ROBOT.txt th bin s chi tit s c gn gi tr cho tng s file cn np. Tip theo l lnh lisct = glGenLists(SOCHITIET) l lnh khi to mt danh sch list gm c s phn t b ng s chi tit.Mc ch l to ra mt list thc hin cc thao tc v ri lu vo mng danh sch.Trong qu trnh m phng,ch cn gi ra m khng cn tin hnh v li.Nh vy s ti u cho qu trnh m phng,sau 75

N TT NGHIP______________________________________________________________________________________

chng trnh s thc hin m tng file s liu c lu trong mng filechitiet[].Nu qu trnh m file thnh cng,qu trnh tip theo l vic np v v li chi tit c thc hin theo lnh sau :glNewList(listct+loop,GL_COMPILE)

lnh ny to ra 1 list mi lu qu trnh v ca chi tit ang cn np.Chng trnh c s liu theo cu trc tp s liu phn tch trn.Tip theo , lnh Vemat() l mt hm thc hin chc nng v mt m t, vi cc tham s u vo l 3 vector cha ta ca 3 nh.Cc lnh ca hm Vemat() nh sau:void CMophongView::Vemat(float *p1, float *p2, float *p3) { glVertex3f(p1[0],p1[1],p1[2]); glVertex3f(p2[0],p2[1],p2[2]); glVertex3f(p3[0],p3[1],p3[2]); }

Tt c m lnh ca hm c File *.STL nh di y.void CMophongView::ReadFileSTL() //Ham nay co chuc nang la doc File .*STL { unsigned int SOCHITIET; FILE *f; char st[216]=""; char filechitiet[100][256]; char xaudoc[216]=""; float dinh[1000][3]; float d1,d2,d3; //Toa do cac dinh cua moi facet float i1,i2,i3; //Vecto phap tuyen tuong ung unsigned int i,j; unsigned int loop; char catbo[20]=""; f=fopen("ROBOT.txt","rt"); if(f==NULL) { MessageBox("Khong tim thay file chua danh sach cac chi tiet!\n","Thong bao"); ExitThread(0); } else { loop=0; while(!feof(f)) { fscanf(f,"%s",st); sprintf(filechitiet[loop],"%s.STL",st); loop++;

76

N TT NGHIP______________________________________________________________________________________} fclose(f); srand((unsigned) time(NULL)); SOCHITIET=loop; for (i=0;i