You are on page 1of 86

N TT NGHIP

______________________________________________________________________________________

TRNG HBKHN

CNG HA X HI CH NGHA VIT NAM

KHOA C KH

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

Gio vin hng dn: TS.

B mn: C hc ng dng

PHAN BI KH I

1. u thit k
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

,
2

N TT NGHIP
______________________________________________________________________________________

. Cc kt qu nhn c

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


c xy dng,
- 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

N TT NGHIP
______________________________________________________________________________________

MC LC
MC 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 ................................................................................................... 13
1.1. Gii thiu v Open GL
..

.....13

..

...14

1.1.1. c im ca OpenGL
1.1.2. Cc th vin h tr lp trnh
OpenGL

..

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

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 TON


2.1. Cch to ra mt project MFC m phn

2.2. Khi to v thit lp cc gi th viOpenGL

PHNG 32
..32
...39

2.3. Thit k m hnh Robot trn SolidWork


2007
.
...58
2.4. Xy dng module c file .*STL v
.*BDF
.
...

61

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
..
..

CHNG III: CHY CHNG TRNH

65

74

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

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

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

N TT NGHIP
______________________________________________________________________________________

DANH

C CC HNH V TRONG N

H
1.1 : M

OpenGL.................16

H 1. 2 :
M

OpenGL......................................16
H 1. 3 :M
.......................17
H

1. 4 :M
.......................18

H
1.5: M
OpenGL.19

H
2.1
:
B

..33

H
1.9
:
G
d

AutoCAD..30

H
1.7
:
C

2007.28

H
2.2 :
...34

H 1.
6
:M
1
OpenGL...20

H
1.10:
G
d

MFC..31.

v
v

: 2

H
1.8
:M
...29

dw
dWorks

v
j
MFC

1 ..

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

N TT NGHIP
______________________________________________________________________________________

H
2.6
:
T
537
H
2.7
:
H
MFC.37.

P j

H
2.8
:
C y
MFC.38.

H
2.9
:
C
MFC.39

P j
d

H
2.10
:
T
OpenGL...40.
H
2.11
:
C
..45.

H
2.12
:
C
47.
H
2.13 : C
....48.

2.15 : C

2.16 : T

2.17 : C

2.18 : T

O P

O D s

O Sz

H
2.14 : C
50

GL

GL

GL

GL

GL 53.

P j

MFC .54

O T

O T

y O

GL..55

.56

H
2.19
:
T
Symbol....57
H

2.20 : C y

N w

OpenGL57

H
2.21
:
V

..58.

2.22 : V

..59

2.23 : V

..59

H
2.24
:
360.

N TT NGHIP
______________________________________________________________________________________

H
2.24
:
3.60.
H
2.25 : M
2007.61

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

f
v

dW

.*

STL
s

y..66

H
2.31
:
T
XchangeWorks.66.
H
2.32:
P
2000....67.
H

2.33: H

2.34 : I

2.35: H

2.36: T

2.37 : K

d/U

/X

dA

CAD

...68

..68
O

*.s d

FF

.69

3D70

s .71

H
2.38 : M
OpenGL..74.

3.1 : R

..75.

3.1 : R

.76.

3.2 : R

3.3 : R

3.4 : R

3.5 : R

....77.
E

s ..78.
S .79
3

.....80

N TT NGHIP
______________________________________________________________________________________

N TT NGHIP
______________________________________________________________________________________

I NI U
Robot 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 NG
Ngy 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 TON
CA R

PHNG HOT NG

BT

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 TON

PHNG.

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 TRNH

PHNG 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

tch lu

(accumulation buffer). Di y l kiu cu trc d liu ho trn cc h iu


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

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 hm
void 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 TRNH

PHNG

Cc 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

+ 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

2.4 : T

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 <afxwin.h>
// MFC core and standard components
#include <afxext.h>
// MFC extensions
//-----------------------------------------------------------------------// Cc a m thm vo y .
#include <gl\gl.h>
//OpenGL Main Library Header
#include <gl\glu.h>
//OpenGL Utility Library Header
#include <gl\glaux.h>
//-----------------------------------------------------------------------

47

N TT NGHIP
______________________________________________________________________________________
#include <afxdisp.h>
// MFC Automation classes
#include <afxdtctl.h>
// MFC support for Internet Explorer 4 Common
Controls
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h>
// MFC support for Windows Common Controls
#endif // _AFX_NO_AFXCMN_SUPPORT

Open

GL

yu

cu

WS_CLIPSIBLINGS

ca
v

phi

vy

c
cn

kiu

WS_CLIPCHILDREN

phi

thm

vo

v
hm

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

tn

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

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 .

2.27 : C y

.*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.

2.28 : C

f .* STL

ASCII

70

N TT NGHIP
______________________________________________________________________________________

2.29 : C y

.*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
______________________________________________________________________________________

2.29 : C y

.*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<3; ++i)
{
ifs>>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
______________________________________________________________________________________

2.29 : C y

.*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<SOCHITIET;i++)
for (j=0;j<3;j++)
mauchitiet[i][j]=(float)rand()/RAND_MAX;
}
listct=glGenLists(SOCHITIET);
for(loop=0;loop<SOCHITIET;loop++)
{
fopen(filechitiet[loop],"rt");
glNewList(listct+loop,GL_COMPILE);
glBegin(GL_TRIANGLES);
fgets(xaudoc,256,f);
while(!feof(f))
{
fgets(xaudoc,256,f);
sscanf(xaudoc,"%16c%f%f%f",&catbo,&i1,&i2,&i3);
if (!feof(f))
{
fgets(xaudoc,256,f);
for (i=1;i<4;i++)
{
fgets(xaudoc,256,f);
sscanf(xaudoc,"%16c%f%f%f",&catbo,&d1,&d2,&d3);
dinh[i][0]= d1;
dinh[i][1]= d2;
dinh[i][2]= d3;
}
glNormal3f(i1,i2,i3);
Vemat(dinh[1],dinh[2],dinh[3]);
fgets(xaudoc,256,f);
fgets(xaudoc,256,f);
}
}
fclose(f);
glEnd();
glEndList();
}

Hm CalcNormal(float *p1, float *p2, float *p3)

L hm xc nh php tuyn ca b m t cn v. Nh c php tuyn ny nn khi


thc hin gn vt liu v chiu sng cho vt th cn m phng, OpenGL mi nhn
ra v x l ng c. Cc on m trong hm ny c vit nh di y.
void CMophongView::CalcNormal(float *p1, float *p2, float *p3)
{

77

N TT NGHIP
______________________________________________________________________________________
float a[3],b[3];
a[0]=p2[0]-p1[0];
a[1]=p2[1]-p1[1];
a[2]=p2[2]-p1[2];
b[0]=p3[0]-p1[0];
b[1]=p3[1]-p1[1];
b[2]=p3[2]-p1[2];
n[0]=(a[1]*b[2])-(a[2]*b[1]);
n[1]=(a[2]*b[0])-(a[0]*b[2]);
n[2]=(a[0]*b[1])-(a[1]*b[0]);
float length = sqrtf(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);
if(length!=0)
{
n[0]=n[0]/length;
n[1]=n[1]/length;
n[2]=n[2]/length;
}
}

2.4.4. S ha qu o chuyn ng ca ROBOT.


Sau cc bc nh trn, th ta c m hnh ca Robot nhng cha th m phng
hot ng ca chng c v cha xy dng quy lut chuyn ng cho c cc c
cu. Trong phn tnh ton ng hc cho ROBOT,nhm vit 1 chng trnh tnh
ton ng hc cho Robot trn ngn ng lp trnh Visual C ++ v v qu o cn gia
cng trn AutoCAD sau s ha ra 1 file *.txt vi cc s liu y phc v cho
qu trnh m phng vi cc thng s nh sau:
+ q1 gc quay ca khu 1 quanh trc OZ1.
+ q2 gc quay ca khu 2 quanh trc OZ2.
+ q3 chuyn ng t nh tin ca Xilanh trong Pistong thy lc.
+ q4 Gc quay ca khu 4 quanh trc OZ4.
+ X Y Z : l to ca bn kp ca cnh tay Robot.
+ deltaq1 : goc sau tr gc trc.
78

N TT NGHIP
______________________________________________________________________________________

+ deltaq2
+ deltaq3
+ detaq4
File S ha qu o chuyn ng sau khi xut ra c cu trc nh sau :
+ Dng u tin : Ta X-Y-Z.
+ Dng th hai : q1- q2 - q3- q4
+ Dng th ba :deltaq1-deltaq2-deltaq3-deltaq4.
C sau 3 dng th chu trnh ca File qu o li quay tr v lc u tc l tr v
cc ta X-Y-Z .
234.868
1.3672
-0.000332801
234.807
1.36687
-0.000337478
234.747
1.36653
-0.000342079
234.687
1.36619
-0.000346807
234.629
1.36584
-0.000351456
234.571
1.36549
-0.000356098
234.515
1.36514
-0.000360663
234.459
1.36478
-0.000365352
234.405
1.36441
-0.000369964
234.351
1.36404
-0.000374569

195.568
-1.88065
-0.00128424
195.266
-1.88193
-0.00127908
194.964
-1.88321
-0.00127421
194.663
-1.88448
-0.00126877
194.361
-1.88575
-0.00126362
194.059
-1.88702
-0.00125849
193.758
-1.88828
-0.00125365
193.456
-1.88953
-0.00124823
193.154
-1.89078
-0.00124312
192.853
-1.89202
-0.00123801

162
258
162
258
162
258
162
258
162
258
162
258
162
258
162
258
162
258
162
258

1.44725
-6.28014e-006

0.00063094

1.44788
-6.28014e-006

0.00063388

1.44851
2.27443e-005

0.000636818

1.44915
-6.33672e-006

0.000639754

1.44979
-6.11041e-006

0.000642686

1.45043
-6.33672e-006

0.000645617

1.45108
2.26311e-005
1.45172
-6.33672e-006
1.45238
-5.8841e-006
1.45303
-6.33672e-006

0.000648545
0.00065147
0.000654391
0.000657312

79

N TT NGHIP
______________________________________________________________________________________

2.4.5. Xy dng module c File qu o c s ha.


Vi cu trc File qu o nh trn, Module c file qu o c dng nh sau :
void CMophongView::Docsolieuquydao() // Quy dao duoc tinh toan va so hoa tren
CAD.
{
// Thuc hien qua trinh doc File so lieu cua quy dao chuyen dong.
// Doc vao cac thong so X-Y-Z de ve quy dao
// Doc vao cac thong so q1 - q2 - q3 - q4.
FILE *f;
char st[256]="";
// Xau can doc .
float temp0,temp1,temp2; // Luu tru cac bien X-Y-Z.
float k1,k2,k3,k4;
// Luu tru cac bien q1 - q2 - q3 - q4.
bool ngungnap = FALSE;
int i,j;
float X,Y,Z;
f=fopen("DiscreteSpline.txt","rt"); // Doc vao File so lieu cua quy dao.
// Kiem tra xem File co ton tai hay khong.
if (f == NULL)
{
sprintf(st,"Khong thay file chua thong so quy dao!");
MessageBox(st);
ExitThread(0);
}
// Bat dau doc File.
while(!feof(f))
{
// dong thu nhat.
fgets(st,256,f);
// Doc vao 1 xau
sscanf(st,"%f%f%f",&temp0,&temp1,&temp2);
t[vitri][0] = temp0; // X.
t[vitri][1] = temp1; // Y.
t[vitri][2] = temp2; // Z.
//dong thu 2
fgets(st,256,f);
sscanf(st,"%f%f%f%f",&k1,&k2,&k3,&k4);
q[vitri][0] = k1;
q[vitri][1] = k2;
q[vitri][2] = k3;
q[vitri][3] = k4;
//dong thu 3
fgets(st,256,f);
vitri++;
}
fclose(f);
}

80

N TT NGHIP
______________________________________________________________________________________

Cc dng u tin l khai bo cc bin cc b v khi n dng ny th b t u m


file qu o.
f=fopen("DiscreteSpline.txt","rt"); // Doc vao File so lieu cua quy dao.

Sau kim tra qu trnh c file, nu thnh cng th m file v b t u c file v


lu vo xu st[256].

2.5. phng chng trnh trn OpenG .


Sau khi thc hin xong cc bc trn nh khi to 1 Project MFC v include cc
gi th vin ca OpenGL em xy dng c 1 khung giao din tng qut cho
bi ton m phng hot ng ca Robot nh sau :

81

N TT NGHIP
______________________________________________________________________________________

2.38 : M

n OpenGL

82

N TT NGHIP
______________________________________________________________________________________

CHNG 3
CHY CHNG TRNH

PHNG

KT UN
83

N TT NGHIP
______________________________________________________________________________________

Nh vy, trong n tin hc ng dng ny em tm hiu v trnh by


xong cch xy dng mt chng trnh m phng hot ng ca Robot Cng nghip
vi s h tr ca cc phn mm nh SolidWorks,AutoCAD,VisualC++, OpenGL.
Trong ton b n ny em hon thnh c cc vn sau :
+ V m t l thuyt:
- N m vng c v bit cch p dng c s l thuyt xy dng
cc chng trnh m phng chuyn ng cho robot.
- N m vng c quy trnh gii quyt cc bi ton tnh ton, thit k,
m phng v iu khin.
- Hiu v bit cch s dng cc chng trnh phn mm nh AutoCad,
OpenGL, DirectX,MFC, Maple, ObjectARX lp trnh m phng.
+ V m t thc hnh
- Xy dng c 1 chng trnh m phng hot ng ca Robot
vi cc chc nng c bn nh chy chng trnh, dng chng trnh
v k o th chut khi tng tc vi m hnh hat ng ca Robot.
- Xy dng c cc module v cc phn trong chng trnh m
phng nh c cc file .*STL v .*BDF tin hnh m phng cc
chuyn ng ca RobotScara 4 bc t do.
Tuy nhin, cn c mt s vn em cha gii quyt c l :
- Cha tm hiu c nhiu v su v ObjectARX s ha ng
thng v ng cong m em mi ch p dng module ff2k.arx c sn
s ha thc hin cho qu trnh m phng.

84

N TT NGHIP
______________________________________________________________________________________

- Chng trnh m phng mi ch p dng c cho mt loi Robot,


cha p dng c cho nhiu c cu hay nhiu loi Robot v ch c
c mt loi file l .*BDF trong qu trnh m phng.
-

Chng trnh m phng s dng gi th vin ha OpenGL


m phng. Tuy nhin, nu xy dng trn DirectX th t c mt
s hiu qu cao hn nh tc x l v hin th hnh nh, cht
lng hnh nh.

+ V phng hng pht trin:


-

Xy dng mt chng trnh (Project) hon thin m phng tt c


cc li Robot v cc c cu ng hc khc nhau.

Xy dng chng trnh vi tc s l ha nhanh hn,c cc


File d liu nhanh hn m khng b chng trnh.

- Pht trin chng trnh c th c c 2 loi file l .*STL v


.*BDF cng trong 1 chng trnh.
- Qua n tin hc ng dng ny em c c s xy dng cc bi
ton m phng hot ng ca Robot v l nn tng vng ch c em
thc hin n tt nghip sau ny.

85

N TT NGHIP
______________________________________________________________________________________

TI IU THA

1. GS.TSKH.Nguyn Vn Khang,
K thut, H Ni 2007, 335 tr.

KHO

v , NXB Khoa hc v

1 GS.TSKH.Nguyn Thin Phc, R


thut, H Ni 2006, 342 tr.

, NXB Khoa hc v K

2 GS.Phm Vn t, C++ &


Thut, H Ni 2000, 636 tr.

3 Phm Cng Ng, V s

K, H Ni 2002, 700 tr.

C++6.0, NXB T

, NXB Khoa hc v K

4 Neon Helium Productions, OpenGL Tutorial.


5 Addison Wesley Publishing Company, OpenGL Programming Guide.

1 Cch to ra File .*STL


- cu trc ca File .*STL.
- Modun c File .*STL --- v v li n trn OpenGL.
Cc Modun chnh trong chng trnh M phng hot ng ca Robot Cng
nghip.

86

You might also like