Anda di halaman 1dari 108

B GIO DC V O TO

TRNG CAO NG CNG NGH THNG TIN TP.HCM


KHOA CNG NGH THNG TIN

KHA LUN TT NGHIP

TM HIU LP TRNH HA 3D TRONG


WINDOWS PRESENTATION FOUNDATION

Ging vin hng dn: ThS.TRN MINH THI


Sinh vin thc hin:
TRN TH DN

MSSV: 3.07.01.488

Ngnh: Cng ngh phn mm


Kha 2007 2010

Tp. H Ch Minh, thng 07 nm 2010

M U

Ngy nay, cng ngh thng tin pht trin mnh m, trong cc ng dng hin i, giao
din ngi dng trc quan chim v tr ht sc quan trng. Vic trnh din ng thng tin, theo
ng cch v vo ng thi im c th em li nhng gi tr kinh t x hi ng k. Vi
nhng ng dng thng mi, chng hn mt ng dng bn hng trc tuyn, vic cung cp mt
giao din ngi dng mnh c th to nn s khc bit gia mt cng ty vi cc i th cnh
tranh, gp phn lm tng tng doanh s v gi tr thng hiu ca hng ny so vi hng khc.
c c mt giao din ngi dng nh vy, vic tch hp ha, media, vn bn v cc
thnh phn trc quan khc nh mt th thng nht ng ng vai tr mu cht v WPF lm
c iu ny.
im ni bt nht ca WPF l hin th hnh nh bng ha 3D, WPF gip cho nhng ai
am m ha 3D m khng th tip cn n trn cng c phc tp OpenGL hay DirectX. WPF
tch hp sn DirectX gip ngi lp trnh pht trin ng dng 3D mt cch d dng m khn
phi quan tm n s phc tp ca DirectX.
WPF l sn phm ca Microsoft, mt t chc nghin cu ng o v i ng k thut
cao, WPF ang dn lang rng khp th gii v trong tng lai khng xa WPF s tr thnh mt
trong nhng cng ngh ph bin nht trong th gii lp trnh ng dng. Xut pht t cc l do
trn em nghin cu v cng ngh WPF ny nhm cung cp cho mi ngi mt s hiu bit nht
nh v cng ngh s pht trin trong mt tng lai khng xa. Rt mong s ng gp kin ca
qu thy c em c thm kinh nghim cng nh nhng tng hay trong cng ngh m mnh
nghin cu.

LI CM N
Li u tin em xin by t lng bit n chn thnh nht n qu Thy C trong Khoa
Cng Ngh Thng Tin, trng Cao ng Cng Ngh Thng Tin Tp.H Ch Minh tn tnh
ging dy, hng dn, gip v to iu kin cho em trong sut thi gian hc tp ti trng.
Em xin chn thnh cm n thy Trn Minh Thi Ngi tn tnh hng dn, gip
em trong sut thi gian thc hin lun vn ny.
V con xin chn thnh cm n gia nh lun ng vin, ng h vt cht ln tin thn
trong sut thi gian qua.
Em xin cm n s quan tm, gip v ng h ca anh ch, bn b trong qu trnh thc
hin kha lun.
Cui cng, em xin chc qu Thy C trng Cao ng cng ngh thng tin Tp.HCM,
Thy Trn Minh Thi, li chc sc khe v lun gt hi c nhiu thnh cng trong cuc
sng.

Tp.H Ch Minh, thng 07 nm 2010

NHN XT
CA GIO VIN HNG DN
...........................................................................................................................................................
...........................................................................................................................................................
...........................................................................................................................................................
...........................................................................................................................................................
...........................................................................................................................................................
...........................................................................................................................................................
...........................................................................................................................................................
...........................................................................................................................................................
...........................................................................................................................................................
...........................................................................................................................................................
...........................................................................................................................................................
...........................................................................................................................................................
...........................................................................................................................................................
...........................................................................................................................................................
...........................................................................................................................................................
...........................................................................................................................................................
...........................................................................................................................................................
...........................................................................................................................................................
...........................................................................................................................................................
...........................................................................................................................................................
...........................................................................................................................................................
Ngy thng nm 2010
K tn

NHN XT
CA GIO VIN PHN BIN
...........................................................................................................................................................
...........................................................................................................................................................
...........................................................................................................................................................
...........................................................................................................................................................
...........................................................................................................................................................
...........................................................................................................................................................
...........................................................................................................................................................
...........................................................................................................................................................
...........................................................................................................................................................
...........................................................................................................................................................
...........................................................................................................................................................
...........................................................................................................................................................
...........................................................................................................................................................
...........................................................................................................................................................
...........................................................................................................................................................
...........................................................................................................................................................
...........................................................................................................................................................
...........................................................................................................................................................
...........................................................................................................................................................
...........................................................................................................................................................
...........................................................................................................................................................
Ngy thng nm 2010
K tn

MC LC
M U ............................................................................................................................................... 1
PHN I: TNG QUAN ..................................................................................................................... 4
V WINDOWS PRESENTATION FOUNDATION.................................................................. 4
1. Gii thiu ....................................................................................................................................... 4
2. S ra i ca Windows Presentation Foundation(WPF) ................................................... 4
3. ng dng ca WPF ..................................................................................................................... 6
4. u im ni bt ca WPF.......................................................................................................... 8
5. B th vin ca WPF ................................................................................................................ 10
PHN II: GII THIU V 3D ..................................................................................................... 11
CHNG 1: GII THIU GC NHN, NH SNG V M T KHNG GIAN TA
......................................................................................................................................................... 14
1. Tng quan .................................................................................................................................... 14
1.1. Ta ba chiu..................................................................................................................... 15
1.2. im trong khng gian ........................................................................................................ 16
2. Gc nhn (Camera) .................................................................................................................... 18
3. nh sng (Light) ........................................................................................................................ 24
3.1. DirectionalLight ................................................................................................................... 25
3.2. PointLight .............................................................................................................................. 26
3.3. SpotLight ............................................................................................................................... 26
3.4. AmbientLight ........................................................................................................................ 27
4. M t khng gian ta ........................................................................................................... 27
1. Hnh nh ng ............................................................................................................................ 32
2. Php bin i hnh ..................................................................................................................... 36
2.1. Php dch chuyn (TranslateTranform3D)........................................................................ 38
2.2. Php bin i kch thc (ScaleTransform3D) ................................................................ 42

2.3.
2.4.

Php xoay (RotateTransform3D) ....................................................................................... 45


Php bin i bng ma trn (MatrixTransform3)............................................................. 57

CHNG 3: T MU CHO HNH 3D ...................................................................................... 64


1. S dng c v Gradient ............................................................................................................ 64
2. S dng c v Tile...................................................................................................................... 70
2.1. ImageBrush ........................................................................................................................... 71
2.2. DrawingBrush ....................................................................................................................... 77
2.3. VisualBrush........................................................................................................................... 85
CHNG 4: NG DNG .............................................................................................................. 92
1. Gii thiu ..................................................................................................................................... 92
2. Phn tch ...................................................................................................................................... 92
3. Giao din ng dng ................................................................................................................... 93
4. Cc dng s kin chnh............................................................................................................. 97
KT LUN......................................................................................................................................... 98
TI LIU THAM KHO ............................................................................................................... 99

DANH MC CC HNH, BNG BIU V S

Hnh 1: Hnh hp c s dng Light. ........................................................................................................13


Hnh 2: Hnh hp khng s dng Light. .................................................................................................13
Hnh 1-1: Hnh trn. ..................................................................................................................................14
Hnh 1-2: Hnh qu bng. .........................................................................................................................14
Hnh 1.1-1: H trc ta . .......................................................................................................................15
Hnh 2-1: Camera vi gc nhn 50mm....................................................................................................19
Hnh 2-2: Camera vi gc nhn 100mm..................................................................................................19
Hnh 2-3: Camera vi gc nhn 25mm....................................................................................................20
Hnh 2-4: Camera vi gc nhn 45 . ....................................................................................................20
Hnh 2-5: Hnh hp s dng PerspectiveCamera...................................................................................22
Hnh 2-6:Cch xc nh OrthographicAerialView. ...............................................................................23
Hnh 2-7: Hnh hp s dng OrthographicCamera. ..............................................................................24
Hnh 3.1-1: Hnh minh ha s dng DirectionalLight. .........................................................................25
Hnh 3.2-1: Hnh minh ha s dng PoinLight......................................................................................26
Hnh 3.3-1: Hnh minh ha s dng SpotLight......................................................................................27
Hnh 3.4-1: Hnh minh ha s dng AmbientLight. .............................................................................27
Hnh 4-1: Hnh nh tam gic trn mt phng. ........................................................................................28
Hnh 4-2: Cch xc nh cc nh da trn h trc ta Oxyz. ........................................................29
Hnh 4-3: Mt trc ca hnh vung Hnh 4-4: Mt sau ca hnh vung ...........................................30
Bng 3: Cc thuc tnh bin i. ..............................................................................................................37
Hnh 2.1-1: Cch tham chiu trn h trc ta v mt vt th. ...................................................38
Hnh 2.1-2: Hnh nh c v bng cch ni cc on thng..............................................................39
Hnh 2.3.1-1: Vt th c xoay vi mt gc 30 . ............................................................................47
Hnh 2.3.1-2: Vt th c xoay vi mt gc -30 ............................................................................47
Hnh 2.3.2-1: Cc im x, y trn h trc ta Oxy. ...........................................................................52
Hnh 2.3.2-2: Gc v ng thng ca im x,y trn h trc Oxy......................................................52

Hnh 2.3.2-3: Cch khc xc nh 2 im x,y. .................................................................................53


Hnh 2.3.2-4: S phc trn h trc ta s phc. ..............................................................................53
Hnh 2.3.2-5: S phc vi gc . .............................................................................................................54
Hnh 1-1: Ta dng xc nh c v. ...................................................................................................66
Hnh 1-2: Chuyn i c v tam gic 2 chiu sang tam gic 3 chiu. ................................................67
Hnh 1-3: Vt th s dng c v Gradient. .............................................................................................70
Hnh 2.1-1: C v s dng ImageBrush..................................................................................................74
Hnh 2.1-2: Hnh nh sau khi c thay i gi tr TextureCoordinates............................................75
Hnh 2.1-3: Hnh nh khi s dng ViewboxUnit. ..................................................................................76
Hnh 2.1-4: Hnh nh sau khi c s dung thm thuc tnh TileMode. ................................................77
Hnh 2.1-5: Hnh nh khi s dng thuc tnh TileMode vi kiu FlipXY. ........................................77
Hnh 2.2-1: S dng DrawingBrush t theo kiu hnh ellipse ly t resource. .................................83
Hnh 2.2-2: S dng DrawingBrush t theo kiu hnh ch nht ly t resource...............................84
Hnh 2.2-3: S dng DrawingBrush t theo kiu sc cho ly t windowns. ...................................84
Hnh 2.3-1: Khi lp phng c t bng nhng khi lp phng nh. .........................................91
Hnh 3: Giao din chnh. ...........................................................................................................................93
Bng 1: Thnh phn giao din theo yu cu v nhng cng ngh chuyn bit cn thit to
chng. ......................................................................................................................................................... 10
Bng 2: Cc thuc tnh ca Light. .......................................................................................................... 25
Bng 3: Cc thuc tnh bin i. ............................................................................................................. 37
Bng 4: Bng m t cc thnh phn ca giao din. .............................................................................. 96
S 1: Cu trc n gin to ra hnh hp 3D................................................................................ 11
S 2: Lp con trong lp Media......................................................................................................... 17
T gc

T vit tt

Windows Presentation Foundation

WPF

Extention MakeUp Language

XAML

ha ba chiu trong Windows Presentation Foundation

WPF 3D

User Interface

UI
Bng: Danh sch cc t vit tt.

M U
Cng ngh Windows Presentation Foundation
Khi khong cch cng ngh gia cc nh sn xut khng cn qu xa, khi tnh nng gia cc
phn mm khng cn nhiu khc bit th l lc giao din ni ln nh l mt trong nhng gi tr
cnh tranh cho mi sn phm phn mm. D l web hay l phn mm ng dng th mt giao
din hp dn, thn thin lun l im nhn cho mi sn phm . Windows Presentation
Foundation (WPF) l mt trong nhng cng ngh mi vi nhng u im ni bt cho vic thit k
v lp trnh giao din.
Vi cng ngh t trc nm 2006, th vic biu din hiu qu tt c cc tnh nng hot ng
nh mt ng dng Window ring bit chy trn desktop, ng thi c th truy cp thng tin thng
qua trnh duyt i hi xy dng hai phin bn c lp s dng hai cng ngh khc nhau. V vic
hp nht gia ngi thit k v ngi lp trnh cng gp khng t nhng kh khn. Windows
Presentation Foundation ra i khng nhng gii quyt c cc vn trn m cn c nhng u
im v ha, m thanh, video Vi vic s dng ngn ng XAML(Extention MakeUp
Language) gip cho vic qun l cc tp tin d dng hn.
c bit, im ni bt nht ca WPF l ha ba chiu. Kh khn nht cho nhng lp trnh
vin khi lp trnh vi DirectX chnh l card ha m nh cung cp h tr DirectX. V gi
y WPF c kh nng thc thi nhng cng vic da trn nhng tnh ton phn mm thay v nhng
c im m nh cung cp phn cng to ra. WPF s xc nh s h tr ca phn cng vi nhng
hiu ng ha c to ra. V bn khng cn phi bn tm v iu .
Lch s ra i v tng lai ca WPF
Lch s ra i
WPF l mt trong nhng cng ngh mi nht trong .NET 2008 (Framework 3.0 hay 3.5) ca
Microsoft, l h thng API mi h tr vic xy dng giao din ho trn nn Windows. WPF
c gii thiu ln u tin cng vi .NET 3.0 vo ngy 21 thng 11 nm 2006. V pht hnh
phin bn chnh thc u tin vo ngy 30 thng 4 nm 2007.
Trang 1

Tip sau l WPF 2.0, WPF 3.0 c pht hnh vo ngy 22 thng 7 nm 2009, v va mi
y l WPF 4.0(vi gi Framework 4.0) c pht hnh vo ngy 7 thng 6 nm 2010.
Tng lai ca WPF
Vic Microsoft chnh thc ra mt b cng c Visual Studio 2010 v nn tng pht trin
.NET 4.0 v WPF 4.0. S kin ny v ang m ra hng mi trong ngnh cng nghip phn
mm, vi s linh hot v kh nng xy dng ng dng mt cch nhanh chng m vn p ng
c nhng yu cu ngy cc kht khe ca ngi dng.
L do chn ti
WPF c xem l th h k tip ca Windowns, tng cng kh nng lp trnh giao din ca
lp trnh vin bng cch cung cp API cho php tn dng nhng li th v a phng tin hin
i, cc cng ngh sn c khc nhau v li th ca card ha. c bit s dng DirectX lm
cng ngh c s xy dng nn nhng hiu ng - DirectX l cng ngh ha ca Microsoft,
tn dng c kh nng ca phn cng tng tc chng trnh .
L sn phm ca Microsoft ( tm lc ti chnh mnh m, vi 95% my tnh c nhn s dng h
iu hnh windows, i ng k thut hng u v s thnh cng c a cc sn phm trong qu kh)
nn bn tin vo kh nng WPF s tr thnh mt trong nhng cng ngh ph bin nht trong
th gii lp trnh ng dng.
Trn c s em quyt nh tm hiu cng ngh WPF v i su vo nghin cu ha 3D vi
vic pht trin mt ng dng m s dng hu ht cc ng dng v ha 3 chiu m WPF h tr
cung cp cho mi ngi mt s hiu bit nht nh v ha 3D vi mt cng ngh WPF m
c d on l s pht trin trong mt tng lai khng xa.

Trang 2

Mc tiu thc hin


V mt l thuyt
+ Nm c c s l thuyt chung v cng ngh WPF cng nh vic s dng d ha
ba chiu trong WPF.
+ Tm hiu cc ng dng v 3D nm c cch thc hot ng v nhng yu cu
cn thit i vi nhng ng dng.
V mt ng dng
+ Xy dng mt m hnh 3D.
+ S dng cc hiu ng cc bin i trn m hnh.

Trang 3

Phn I: TNG QUAN


V WINDOWS PRESENTATION FOUNDATION

1. Gii thiu
Windows Presentation Foundation (WPF) cn c gi di tn m l Avalon, l mt h
thng th vin con trong b .Net Framework v c lin kt di dng XAML. WPF c tch
hp trong Windows Vista v Windows 2008, ngoi ra, n cn h tr i vi Windows XP SP2 v
c Windows Server 2003. N cung cp kiu lp trnh cho vic xy dng ng dng v h tr
1 cch trong sut gia giao din ngi dng v m hnh ng dng doanh nghip. Mt ng
dng WPF c th c trin khai trn desktop hoc trn 1 thit b thng qua trnh duyt web.
Hn th na, n cn h tr cc nhiu control, thit k v pht trin giao din thn thin, trc quan
bn ngoi ca chng trnh windows. N hng n s hp nht ca 1 ng dng dch v: giao
din ngi dng, ha 2D v 3D, cc vn bn c nh v ng, cc m hnh ha nng cao,
ha vector, hnh nh ng, Data Binding, Audio v Video. Mc d Windows Form s tip
tc c s dng rng ri, nhng cc cng ty pht trin ng dng WPF nh l cc ng dng
doanh nghip (line-of-bussiness).
Microsoft Sliverlight l mt nn tng web ca WPF hot ng nh mt dng Flash v cc ng
dng mobiles vi cc m hnh chng trnh tng t nh l 1 ng dng .NET. Tnh nng 3D
khng c h tr, tuy nhin XPS v c s ha vector c tch hp.

2. S ra i ca Windows Presentation Foundation(WPF)


Windows Presentation Foundation c pht hnh chnh thc vo thng 11 nm 2006.
V sao WPF li ra i?
i n tng lai bng ci nhn t qu kh, nm 2001, Microsoft cho ra i mt tp hp cc
cng ngh nn tng, c gi vi tn chung l .NET. Hu ht cc cng ngh ny u a ra cc
m hnh lp trnh mi, hon ton cha tng xut hin trc . Ly v d:
Trang 4

1. ASP.NET Web Forms a m hnh lp trnh Windows truyn thng ln th gii Web, bin
Web t mi trng state-less (client v server tch bit hon ton) thnh mt mi trng thng
nht: state-full Web.
2. ADO.NET nh ngha ra cc class tng qut nh Connection, Command, DataSet cc
developer tha k t chng, m rng kh nng tip cn vi nhiu loi RDMS (Relational
Database Management System) khc nhau nh SQL Server, Access, Oracle, MySql, ng thi
nng cao kh nng debug khi thao tc vi database.
3. Common Language Runtime lm th vin nn tng gip lp trnh vin s dng nhiu ngn
ng lp trnh khc nhau c th cng lm vic vi nhau trong mt project. C th k ra C#, J#, F#,
VB.NET, Delphi.NET, C++.NET, IronRuby, IronPython
Tuy nhin cng ngh m nhng nh pht trin trung thnh nht ca Microsoft mong mun
nhn thy bc t ph Windows Forms li chng c g thay i. hn mt thp k, k t
khi Windows 95 ra i, ngi ta vn phi to giao din cho ng dng desktop bng cch gi cc
hm Windows API. Windows Forms tuy khoc bn ngoi giao din ko th nhng thc cht bn
di n vn b ph thuc vo cc li gi API, nn n khng c g l c sc.
Tri qua mt thi gian tn ti di nh th, Windows Forms c chun ha v mang trong
mnh y cc cng c cho php xy dng cc chng trnh d dng. Tuy nhin, do s dng
Windows API, nn giao din ca cc control chun nh button, checkbox, textbox b ph thuc
vo phin bn Windows m .NET Framework ang chy, v d 3D button trong Vista Aero khi
em sang Windows 2000 th li bin thnh flat button. Nhng ch l vn nh, rc ri ln
nht ca Windows Forms chnh l giao din ca cc control chun ny li gn nh khng th
c can thip v thay i theo t duy sng to ca nh thit k, ngoi tr trng hp c ai
chu kh n ni ngi vit c tn code bng m hnh lp trnh cp thp GDI/GDI+ (Graphical
Device Interface).
Trong cc ng dng hin i, giao din ngi dng trc quan chim v tr ht sc quan trng.
Vic trnh din ng thng tin, theo ng cch v vo ng thi im c th em li nhng gi tr
kinh t x hi ng k. Vi nhng ng dng thng mi, chng hn mt ng dng bn hng trc
tuyn, vic cung cp mt giao din ngi dng mnh c th to nn s khc bit gia mt cng ty
vi cc i th cnh tranh, gp phn lm tng doanh s v gi tr thng hiu ca hng ny so vi
Trang 5

hng khc. c c mt giao din ngi dng nh vy, vic tch hp ha, media, vn bn
v cc thnh phn trc quan khc nh mt th thng nht ng ng vai tr mu cht.
WPF ra i chnh l xy dng mt nn tng chung gii quyt nhng thch thc nu
trn.

3. ng dng ca WPF
WPF c xy dng nhm vo ba mc tiu c bn:
1) Cung cp mt nn tng thng nht xy dng giao din ngi dng.
2) Cho php ngi lp trnh v ngi thit k giao din lm vic cng nhau mt cch
d dng.
3) Cung cp mt cng ngh chung xy dng giao din ngi dng trn c Windows
v trnh duyt Web.
WPF l mt trong 3 thnh phn mi ca .NET Framework 3.0 (Windows Presentation
Foundation, Windows Communication Foundation, Windows Workflow Foundation). C th xem
s ra i ca WPF l mt cu cnh cho nhng nh pht trin ang phi thc hin cng on code
ht sc t m to giao din. WPF thay i nhng quan nim lp trnh giao din c, xa i nhng
bt cp cn tn ti ca Windows Forms bng cch gii thiu mt m hnh hon ton mi l.
Trong WPF vn tn ti khi nim control chun nh label, radio button, tuy nhin thay v g i
Windows API th chng c kh nng t v ra text, t v border, t v background cho chnh bn
thn ca mnh. Tnh t ph l k t nay, khng b API cn tr, nh pht trin c th ton quyn
kim sot cc i tng ha. WPF cung cp cc tnh nng tht s mnh m h tr nh pht
trin can thip vo qu trnh xut giao din (render) ca control ra mn hnh m khng phi vit
bt k dng code no. Mt s im nhn th v nn c k ra u tin:
1. S dng i tng Transformation xoay trn, ko dn, thu nh hay xoay nghing bt c
th g thuc v giao din.
2. To hnh nh ng (Animation) cc control tr ln lung linh chuyn ng ngay trc mt
ngi s dng.
3. Xy dng Form c cc hnh th khc l, h tr control c mu trong sut to v mi m
v chuyn nghip
Trang 6

WPF s dng DirectX lm cng ngh c s xy dng nn nhng hiu ng th v nh trn.


DirectX l cng ngh ha ca Microsoft, tn dng c kh nng ca phn cng tng tc
chng trnh. Ly v d, mt vn n gin l v mt on thng t im (0, 0) n im (10,
10).
Trong GDI/GDI+ ca Windows Forms, .NET s to ra mt danh sch cc im nm gia (0,
0) v (10, 10), tc l cc im (1, 1), (2, 2), , (9, 9) ri v ra tng im ny. Do v nhiu im
k nhau nn cui cng cc im ny to ra cm gic l v c mt on thng. Ni mt cch
khc, phng php ca Windows Forms l s dng phn mm v ra mt tp hp im
i vi DirectX, n gi trc tip hm DrawLine ca card ha, v card ha s v ngay
ra mt ng thng khng cn phi tnh ton n cc im trung gian. y l phng php s
dng phn cng v ra mt nh Vector. Nh DirectX m tc render c ci thin ng k v
phn cng th chy nhanh hn rt nhiu so vi phn mm cng mt chc nng.
Vi WPF, nh pht trin khng cn phi au u vi bi ton x l tc , nht l i vi cc
phn mm game hin i ngy nay, i hi ha 3D sinh ng m GDI/GDI+ kh lng c th
p ng c. Vi WPF, nh pht trin c th t do sng to v giao din, to nn cc hiu ng
bt mt m trc y khng th no thc hin c vi Windows Forms.
Mc d ngi ta bit n WPF vi kh nng ha tuyt vi, vi hnh nh ng, vi cc tnh
nng 3D c o, nhng WPF vn c th c dng xy dng nn cc ng dng Windows
truyn thng, s dng cc control chun nh trong Windows Forms. S tht l khi chn la kiu
giao din truyn thng ny, th cc thao tc i vi control khng khc bao nhiu so vi Windows
Forms, v nh pht trin c th d dng lm quen ngay vi mi trng mi m khng mt qu
nhiu cng sc.
C mt vi ci tin trong WPF khng thuc v phn giao din, nhng chng ng c lu
khi nh pht trin mun pht trin mt ng dng chuyn nghip v bi bn hn. C th k ra
l:
M hnh Data-Binding mi c ci thin nhiu so vi Windows Forms.
Cc class dng phc v cho vic in ti liu v sp xp trnh t in n.
H thng ti liu c th hin th mt s lng rt ln cc vn bn c nh dng nh Word,
Excel, PDF
Trang 7

Xy dng ng dng page-based nh website, c th chy trn Internet Explorer v mi


trng World Wide Web, khng b cc cnh bo v bo mt v khng cn thc hin qu trnh ci
t (Portable Applications).

4. u im ni bt ca WPF
C mt s cc tnh nng mi trong WPF m bn c th tn dng khi bn pht trin cc ng
dng WPF ca bn. Trc tin, s dng sc mnh phn cng ha WPF mi th thc hin
mt m hnh ha vc t, da vo cc Direct3D. iu ny cho php cng ngh ha ty thu
nh phn gii mn hnh m khng mt i cht lng hnh nh, cng khng th sa kch thc
ha.
Ngoi ra, hnh dung d dng giao din ngi dng (UI), WPF gii thiu ngn ng mi da
trn XML, c gi l XAML. XAML cho php cc ng dng t ng phn tch c php v thao
tc giao din ngi dng mt trong hai yu t thi gian thit k hoc thi gian khi ng. N
dng m hnh code-behind, lp trnh tng t nh ASP.NET, cho php ngi thit k v ngi
pht trin lm vic song song v lin mch cng vic ca mnh. Tt nhin, WPF cng cung cp
cho bn nhng la chn khng s dng cc tp tin XAML khi bn pht trin cc ng dng
WPF, c ngha l bn vn c th pht trin cc ng dng ca bn hon ton bng code nh C#,
C/C++, hoc Visual Basic.
Mt trong nhng iu gy au u cho nhng lp trnh vin khi lp trnh vi DirectX l cc
c im m nh sn xut card ha cung cp h tr DirectX. Tuy vy vi WPF iu khng
ng lo ngi, bi n c kh nng thc thi nhng cng vic da trn nhng tnh to n phn mm
thay v nhng c im m nh cung cp phn cng to ra. WPF thng minh xc nh s h
tr ca phn cng vi nhng hiu ng ha c to ra. V bn khng cn phi bn tm v iu
. Tt nhin vi nhng hiu ng animation phc tp, nh ng c thc thi trn mt nn tng
phn cng c th cng s c nhng nh hng nht nh i vi qu trnh thc thi.
Nhng c im to ra nhng ci tin hp dn cho WPF, nhng n cn cung cp nhng
thay i mnh m khc cho cng ngh lp trnh giao din. V di y s l mt lot nhng h
tr m cng ngh WPF mang li cho ngi lp trnh vin:
M hnh giao din Web (Web-like layout model): khng ch cho php xy dng
nhng giao din vi nhng i tng c nh , WPF cn cung cp nhng layout linh hot
Trang 8

hin th, cho php xy dng nhng giao din ng theo ni dung, vi nhng ngn ng
khc nhau.
ha phong ph: Thay v lm vic vi nhng im nh, bn c c th lm vic
trc tip vi nhng i tng hnh hc c bn: hnh ch nht, hnh eclipse. Bn cng c
nhng c im mi nh iu khin trong, m, cng cc hiu ng 3D.
Hin th vn bn linh hot: WPF c kh nng cung cp nhng kh nng hin th
vn bn mt cch phong ph bt c u. Bn c th kt hp vn bn vi cc i tng
khc. Hay c th s dng cc c im mi hin th mt lng ln vn bn mt cch d
c nht.
Cc hiu ng Animation: Bn c th s dng b tnh thi gian timer v li hnh.
Nhng trong WPF vi c im c tch hp thnh mt phn ca Framework. T
bn c th nh ngha nhng hiu ng chuyn ng cho cc i tng ha khc nhau.
H tr video, audio file: Khng ging nh cc cng ngh trc nh Winform c
s hn ch trong vic h tr chy cc file Audio v Video. WPF h tr chy tt cc file
m Window Meida Player c th c c, v cho php bn c th chy ng thi mt
hoc nhiu file. c bit WPF cung cp cc tool cho php bn tch hp cc cc ni dung
video vo giao din, v c cc hiu ng 3D (v d hin th video trn cc mt ca hnh hp
3D).
Cn rt nhiu c im mnh m khc m WPF cung cp h tr qu trnh thit k v lp
trnh nh : Stypes and Template, Command, Pages Base Application.WPF c coi nh l
cng ngh to ra giao din cho nhng ng dng Window ca th h tip theo. phn gii c
lp: cng l mt trong nhng c im khc to ra s khc bit cho cng ngh WPF. Nu nh cc
giao din c thit k bng cc cng ngh trc nh Winform vn da trn GDI/GDI+ s gp
nhiu phin phc khi lm vic vi nhng mn hnh c phn gii khc nhau. Hnh v s ln hn
vi cc mn hnh c phn gii thp, hay nh i vi khi phn gii mn hnh cao. Nhng
trong WPF iu khng cn l vn quan ngi vi nhng ngi thit k. Bi WPF cho php
hin th cc i tng vi ng kch c khi thit k di cc phn gii khc nhau ca mn
hnh.

Trang 9

Hin th nh Vector thay v nh BitMap mang li cho cng ngh WPF kh nng hin th linh
hot vi nhiu kch thc khc nhau m khng lo lm v hnh nh nhng i tng ha.S
c lp gia thit k v lp trnh l mt trong nhng bc tin m WPF mang li. Cc i tng
ha trong WPF c th hin thng qua mt loi m n gin l XAML (Extention MakeUp
Language). l mt loi m n gin gn ging nh HTML dng t o v tinh chnh cc i
tng ha. l mt bc tin ln trong qu trnh thit k v lp trnh giao din.
XAML cho php ngi thit k c th to ra cc giao din c lp trn cc cng c thit k
chuyn bit nh Microsoft Expression Interactive Designer. Sau cc giao din c xut ra
di dng m XAML v ngi lp trnh ch cn import vo cc tool nh Visual Studio to ra
giao din cho chng trnh ca mnh. iu ny r rng lm gim i rt nhiu cng sc v phc
tp trong qu trnh thit k phn mm. N cho php hai ngi vi vai tr khc nhau c th tin
hnh song song cng vic ca mnh.

5. B th vin ca WPF
Gi y WPF h tr nhiu tnh nng lp trnh giao din trong cng mt cng ngh n nht.
iu ny gip cho qu trnh t o giao din ngi dng tr nn d dng hn ng k.
Windows
Forms
Giao din
ha (form v
cc control)
On-screen vn
bn
Fixed-format
vn bn
Hnh nh
Video v m
thanh
ha 2 chiu
ha 3 chiu

PDF

Windows
Forms/
GDI+

Windows
Direct3D
Media Player

WPF

x
x

x
x

x
x

x
x
x

x
x

Bng 1: Thnh phn giao din theo yu cu v nhng cng ngh chuyn bit cn thit to
chng.
Ngun t: http://msdn.microsoft.com/en-us/library/aa663364.aspx

Trang 10

Phn II: GII THIU V 3D


Microsoft Windows Vista l phin bn u tin ca Windows c tch hp sn ha 3D, v
gi y 3D c tch hp vi Microsoft Windows Presentation Foudation(WPF), giao din lp
trnh ng dng client(API) c gii thiu trong nm 2006 nh mt phn ca Microsoft NET
Framework. 3.0 mc d NET 3.0 c tch hp trong Windows Vista, bn cng c th ci t n
di Microsoft Windows XP vi Service Pack 2 hoc Windows Server 2003 vi Service Pack 1 .
K t ln u xut hin(nm 1995), DirectX nhanh chng pht trin cng vi s pht trin
mnh m ca game ha. Gi DirectX c tch hp vo mt phn ca Windows. Tuy vy
lp trnh vi DirectX khng n gin v thc s chng kh phc tp. Chnh v vy n cha bao
gi c s dng to ra nhng giao din ha cho cc phn mm ng dng.
WPF ra i v thay i tt c iu . WPF khng da trn nn tng truyn thng l
GDI/GDI+. im c bit chnh l DirectX lm nn tng cho bt c giao din no c to ra. D
l hnh nh 3D phc tp hay n gin cho l mt button, hin th text th n cng thng qua
DirectX. iu ng ngha vi vic nhng ng dng thng thng cng c th c nhng hiu
ng ha phc tp, v d nh nhng hiu ng trong sut, bng . V cng nh th m c th
tng tc x l ha thng qua s tng tc gia DirectX v c ard ha.
Cu trc n gin to mt hnh nh 3D
Hnh Hp 3D

MeshGeometry3D

Light

Material

Camera

S 1: Cu trc n gin to ra hnh hp 3D


to ra c hnh hp 3D th iu u tin bn phi lm l nh ngha mt i tng, mt
vt th trong khng gian thng qua mt i tng l MeshGeometry3D , i tng ny bao
gm Positions cha cc nh ca hnh v TriangleIndices m t cch kt ni nhng nh
to thnh mt vt th m ta mun nh ngha.
Trang 11

Th hai l chng ta s nh ngha mu cho i tng vi Material hoc c th dng thm


i tng BackMaterial t mu mt sau ca vt th.
V mt yu t m to nn b mt ni cho vt th m khi nhn vo chng ta c cm gic nh
mt hnh nh 3D l Light , nu nh khng c i tng ny th bn khng th thy c hnh
nh 3D m thay vo l mt hnh phng.
Nhng mt yu t khng km phn quan trng l Camera. Camera dng khai bo gc
nhn cho vt th, nu khng c i tng ny th bn khng th nhn thy c vt th.
V d nh ta to mt vt th l mt hnh hp:
<Window x:Class="vidu2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="300" Width="500">
<Grid>
<Viewport3D >
<!Camera--!>
<Viewport3D.Camera>
<PerspectiveCamera Position="5,5,5" LookDirection=" -5,-5,-5"
UpDirection=" 0,1,0" NearPlaneDistance="1"/>
</Viewport3D.Camera>
<ModelVisual3D>
<ModelVisual3D.Content>
<Model3DGroup>
<!-Light--!>
<DirectionalLight Color="White" Direction="2 -3 -1" />
<GeometryModel3D>
<!-MeshGeomeTry--!>
<GeometryModel3D.Geometry>
<MeshGeometry3D Positions="0 0 0, 1 0 0, 1 0 1, 0 0 1,
1 0 1, 1 0 0,1 1 0, 1 1 1,
0 0 0, 0 1 0, 1 1 0, 1 0 0,
0 1 1, 1 1 1, 1 1 0, 0 1 0,
0 0 1, 0 1 1 , 0 1 0, 0 0 0,
0 0 1, 1 0 1, 1 1 1, 0 1 1"
TriangleIndices="0 1 2, 0 2 3, 4 5 6, 4 6 7, 8 9
10, 8 10 11,12 13 14,12 14 15,
16 17 18, 16 18 19, 20 21 22, 20 22 23 "/>
</GeometryModel3D.Geometry>
<!-Material--!>
<GeometryModel3D.Material>
<DiffuseMaterial Brush="Blue"/>
</GeometryModel3D.Material>
<GeometryModel3D.BackMaterial>
<DiffuseMaterial Brush="Yellow"/>
</GeometryModel3D.BackMaterial>
</GeometryModel3D>
</Model3DGroup>
</ModelVisual3D.Content>

Trang 12

</ModelVisual3D>
</Viewport3D>
</Grid>
</Window>

Kt qu:
(0,1,0)

(1,1,1)

(0,0,0)
(0,1,1)

(1,1,0)

(1,0,0)

(0,0,1)

(1,0,1)

Hnh 1: Hnh hp c s dng Light.


Nu bn khng khai bo Light th kt qu ch l mt hnh phng:

Hnh 2: Hnh hp khng s dng Light.


hiu r hn cch s dng tng loi i tng v p dng cc i tng nh th no
to ra mt vt th m ta mong mun th ta s i su hn vo cc chng.

Trang 13

Chng 1: GII THIU GC NHN, NH SNG V M T KHNG


GIAN TA
1. Tng quan
K t khi cc ngh s ca thi i Upper Paleolithic bt u t im nhng bc tng hang
ng vi hnh nh ca th sn v con mi ca h, ngi ny c gng m t ba chiu, thc t
cc i tng trn b mt hai chiu. Trn bo ch, tp ch, sch, bo tng, album nh, rp chiu
phim, th vin video, v my tnh c y cc kt qu v hnh nh ba chiu.
Nhn thc ca con ngi nh vy l hi ha vi khng gian ba chiu ca th gii thc m
chng ta d dng thuyt phc chp nhn, ngay c bn v n gin nh l i din cho cc i
tng thc t.
V d ch l mt vng trn hnh hc:

Hnh 1-1: Hnh trn.


Nhng thm mt bng nh, v n s tr thnh mt qu bng:

Hnh 1-2: Hnh qu bng.

Trang 14

Mt vng trn n gin ch l mu vi mt RadialGradientBrush . Cc thay i t mu


trn cc cnh n trng ti im quy nh vi GradientOrigin .
Cc lp th vin ha ba chiu trong Windows Presentation Foundation (vit tt l WPF
3D) thc hin tt c cc ton hc cn thit thc hin mt hnh nh ba chiu ln mt b mt hai
chiu nh mt mn hnh my tnh hoc my in. Ngi lp trnh c th chn kiu chiu m mnh
mun bng cch la chn mt trong cc lp rt ra t cc lp Camera c nh ngha trong .NET
vi

namespace

System.Windows.Media.Media3D .

Hai

lp

tn

OrthographicCamera v PerspectiveCamera thc hin cc php bin i cn thit cho cc

chuyn i v chiu theo tia nhn. WPF 3D cng bao gm mt lp MatrixCamera cho cc mc
ch cao cp m c th thc hin ty cc i tng ba chiu trn cc b mt hai chiu.
xc nh c v tr hay gc nhn th ta da vo h trc ta v cc im thng qua h
trc ta .
1.1.

Ta ba chiu

Hnh 1.1-1: H trc ta .


Ba trc gp nhau ti mt gc. Tng gi tr ca X l bn phi; gi tr gia tng ca Y l tr ln;
gi tr gia tng ca Z i ra khi mn hnh my tnh v hng ti ngi xem. iu ny c bit
n nh mt bn tay bn phi phi hp h thng: Nu bn im cc ngn tr ca tay phi ca bn

Trang 15

theo hng tng gi tr X v im ngn tay gia tng gi tr Y, v im ngn tay ci tng
gi tr Z.
Biu cho thy cch phi hp h thng l ty vo tng hnh, bi v n tht s ph thuc vo
cch bn xem n. Bn c th xem n t tt c cc hng khc nhau. Tht vy, nu ti nh hng
s trc Z ch chnh xc i vi ngi xem, cc trc s c nhn thy ch nh l mt im.
Cng nh hai trc ca hai chiu Cartesian h thng phn chia thnh bn mt phng, ba trc
trong khng gian ba chiu phn chia thnh tm mt phng. Tm mt phng khng c tn tiu
chun, nhng ba trc c gi l mt phng YZ, mt phng XZ, v mt phng XY:

Mt phng YZ bao gm tt c cc im m X bng 0.


Mt phng XZ bao gm tt c cc im m Y bng 0.
Mt phng XY bao gm tt c cc im m Z bng 0.
Bn c th hnh dung ba mt phng nh chia khng gian trong mt na, v nh ngha mt
cch d hiu nh sau:
Mt phng YZ chia khng gian vo bn phi(right ) (X > 0) v tri(left) (X < 0).
Mt phng XZ phn chia khng gian vo u trang(top), hay trn(upper) (Y > 0),
v di cng(bottom ), hoc thp hn(lower) (Y < 0).
Mt phng XY phn chia khng gian vo pha trc(front) (Z > 0) v pha
sau(back), hoc pha sau(rear) (Z < 0).
Mi mt phng trong s tm mt phng sau c th c m t vi mt cm t nh "pha
di bn tri pha trc" . l cm t c bit dng ch tt c cc im trong X l s m,
Y l s m, v Z l s dng.
1.2.

im trong khng gian

Mt v tr chnh xc trong khng gian ba chiu c i din bi cc im (X, Y, Z). WPF 3D


xc nh cu trc ca Point3D cha cc im (X, Y, Z) c th c hoc to cc im X, Y, v Z
ca loi Double , v mt constructor to ra mt i tng Point3D t X, Y, Z v cc thnh phn
ca n.
Di y l mt s cch to v khi to mt i tng Point3D bng C#:
Point3D point = new Point3D (2.33, 1.5, -2);
Trang 16

Trong : X = 2.33, Y = 1.5 v Z = -2.


Trong XAML, gi tr ca i tng Point3D c phn bit bi khong trng hoc du phy:
2.33, 1.5, -2 hoc 2.33 1.5 -2.
Thng thng, mt ng dng WPF 3D phi ch nh mt tp hp cc im cho i tng
Point3D , v c s dng lp Point3Dcollection, lp ny s Add cc im ca i tng
Point3D .

V d:
Point3DCollection ptcoll = new Point3DCollection ();
ptcoll.Add (New Point3D (2.55, 1.5, -2));
ptcoll.Add (New Point3D (0, 2.5, 7));
ptcoll.Add (New Point3D (1, 1, -3));

Bn cnh Point3DCollection , cn c Int32Collection tng t (c nh ngha


trong khng gian tn System.Windows.Media ). C hai

Point3DCollection

Int32Collection bt ngun t mt lp c tn l Freezable.


System.Windows.Media

Freezable

Point3DCollection

Int32Collection

S 2: Lp con trong lp Media.


Trong namespase System.Windows.Media.Media3D cng bao gm mt cu trc c tn l
Size3D m cha kch thc khng gian ba chiu vi cc thuc tnh c tn l X, Y, v Z. Mt

i tng Size3D vi X, Y, v Z tt u bng 0 c coi l rng.


Cu trc Rect3D nh ngha mt hnh ch nht trong khsng gian 3D l mt s kt hp ca
mt i tng v tr (Point3D) v mt cu trc kch thc (Size3D). Ba thnh phn ca thuc
kch thc phi khng m, v tr lun lun gc lower-left-rear ca hnh ch nht. Rect3D cng

Trang 17

nh ngha cc thuc tnh X, Y, v Z, trong cc thuc tnh X, Y, Z ging thuc tnh ca i


tng Point3D .

2. Gc nhn (Camera)
Camera dng to gc nhn cho vt th, ta c 2 cch xem vt th thng qua Camera l
PerspectiveCamera v OrthographicCamera .

u tin, ta s dng mt PerspectiveCamera , n tng t nh cch m mt con ngi hay


mt my nh thng thng hay lm vic. i tng xa my nh hn th xut hin nh hn.
Chic my nh ny phi nm trong mt v tr c th trong khng gian 3D, m bn ch ra bng
cch thit lp cc thuc tnh Position cho mt i tng ca loi Point3D . Thng thng v tr
my nh t mt ni no trong na Z dng ca khng gian 3D. i vi nhng cnh n gin,
my nh ny thng nm ngay trn trc Z dng, c ngha l X v Y c ta l 0. V d ny, ti
mun t mt my nh ra xa trung tm vi ta X = -2, Y =0, Z = 5 v nm v bn tri ca trc
Z:
<PerspectiveCamera Position="-2 0 5" />

Bn cng cn phi ch nh mt hng, c gi l LookDirection n c gi l mt


hng v n l mt i tng Vector3D. Thng thng bn s t hng ny trong na sau ca
khng gian 3D. Cc vector n gin c th s dng l mt im trong c hng song song vi
trc Z m, l vector (0, 0, -1):
<PerspectiveCamera Position = "-2 0 5"
LookDirection = "0 0 -1" ... />

Thay th (0, 0, -2), (0, 0, -3), vn s lm vic ging nh vy. Do (0, 0, -1) l gi tr mc
nh ca LookDirection v gi tr mc nh ca Position l im (0, 0, 0.
Bn c th s dng PerspectiveCamera vi cch ch xc nh Position v
LookDirection , tuy nhin y chng ta s s dng cc gi tr mc nh ca hai thuc tnh

khc. Cc thuc tnh UpDirection l mt thuc tnh Vector3D cho bit lm th no my nh


c nh hng. Mc nh vector ny l (0, 1, 0 v ch ra rng my nh ny c t chc
hng ch theo hng Y dng.
Thuc tnh tip theo ca PerspectiveCamera l FieldOfView , l mt gc m bn ch
nh bng . Mc nh l 45 :
Trang 18

<PerspectiveCamera Position="-2 0 5"


LookDirection="0 0 -1"
UpDirection="0 1 0"
FieldOfView="45" />

Mt FieldOfView gi tr nh th bn s thy c hnh nh ln hn. Mt FieldOfView ln


bn s c c hnh nh nhiu hn trong khung hnh, nhng mi th u nh hn.
Hy xem xt cc my nh pinhole, ba my nh pinhole khc nhau cho tt c cc di khc
nhau theo cc tiu im. Mt tiu chun di tiu c 35mm cho my nh k thut s hin i v
tng ng vi my nh y l 50mm, c ngha l cc pinhole (hoc ng knh) cch khong
50mm t b phim. y l my nh c kch thc thc t nhn t trn vi cc b phim bn tri v
camera ch sang phi:

Hnh 2-1: Camera vi gc nhn 50mm.


Cn c vo chiu rng ca b phim v khong cch ca pinhole t b phim, gc xem l
khong 40 . l tnh bng cch ly mt na chiu rng ca phim (18mm), phn chia theo
di tiu c (50 mm), dng cc tip tuyn nghch o, v sau tng gp i. Gc xem trong
WPF 3D l da trn chiu rng hn l chiu cao, do theo chiu ngang 40 xem c lin kt
vi mt ng knh tiu chun 50mm hin c, ging nh cc thuc tnh FieldOfView vi mc
nh l 45 cho lp PerspectiveCamera .
Mt ng knh tele 100mm va phi trng nh th ny:

Hnh 2-2: Camera vi gc nhn 100mm.

Trang 19

Gc xem hp hn. Mt ng knh gc rng c th c mt tiu c khong 25mm: gc xem


rng ln hn:

Hnh 2-3: Camera vi gc nhn 25mm.


Trong cnh 3D thit lp, tam gic nm trn trc Z vi Z ta m phm vi i t 0 n -2.
Cc camera c t ti im (-2, 0, 5) ch theo hng Z m vi mt gc xem l 45 . Th
trn hnh nh ca thit lp ny trng ging nh sau:

Hnh 2-4: Camera vi gc nhn 45 .


Hp mu xm l my nh. Tam gic ny c i din bi cc ng mu xm dy hn trn
trc Z. Nu my nh lch hn v pha bn tri, hoc gn hn vi trc X, hoc thp hn, n s
khng cho thy ht ton b tam gic.
Trang 20

Khi chy chng trnh chng ta s nhn thy hnh tam gic pha bn phi ca mn hnh.
Mt v d tng qut v cch hin th vt th khi dng PerspectiveCamera:
PerspectiveSquareCuboid.xaml
<!-- ==========================================================
PerspectiveSquareCuboid.xaml (c) 2007 by Charles Petzold
========================================================== -->
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
WindowTitle="Perspective Square Cuboid"
Title="Perspective Square Cuboid">
<Viewport3D>
<ModelVisual3D>
<ModelVisual3D.Content>
<Model3DGroup>
<GeometryModel3D>
<GeometryModel3D.Geometry>
<!-- Square cuboid sides in order:
front, left, top, right, bottom, rear. -->
<MeshGeometry3D
Positions="0 1 0, 0 0 0, 1 1 0, 1 0 0,
0 1 -4, 0 0 -4, 0 1 0, 0 0 0,
1 1 -4, 0 1 -4, 1 1 0, 0 1 0,
1 1 0, 1 0 0, 1 1 -4, 1 0 -4,
1 0 0, 0 0 0, 1 0 -4, 0 0 -4,
1 1 -4, 1 0 -4, 0 1 -4, 0 0 -4"
TriangleIndices=" 0 1 2, 1 3 2,
4 5 6, 5 7 6,
8 9 10, 9 11 10,
12 13 14, 13 15 14,
16 17 18, 17 19 18,
20 21 22, 21 23 22" />
</GeometryModel3D.Geometry>
<GeometryModel3D.Material>
<DiffuseMaterial Brush="Cyan" />
</GeometryModel3D.Material>
<GeometryModel3D.BackMaterial>
<DiffuseMaterial Brush="Red" />
</GeometryModel3D.BackMaterial>
</GeometryModel3D>
<!-- Light sources. -->
<AmbientLight Color="#404040" />
<DirectionalLight Color="#C0C0C0" Direction="2
</Model3DGroup>
</ModelVisual3D.Content>
</ModelVisual3D>
<!-- Camera. -->
<Viewport3D.Camera>
<PerspectiveCamera Position="-2 2 4"
LookDirection="2
UpDirection="0 1
FieldOfView="45"

Trang 21

-3 -1" />

-1 -4"
0"
/>

</Viewport3D.Camera>
</Viewport3D>
</Page>

Kt qu:

Hnh 2-5: Hnh hp s dng PerspectiveCamera.


Th

hai

ta

thay

th

PerspectiveCamera

bng

OrthographicCamera .

PerspectiveCamera v OrthographicCamera bt ngun t ProjectionCamera , trong


OrthographicCamera xc nh cc thuc tnh Position , LookDirection , UpDirection,
NearPlaneDistance , v FarPlaneDistance .
PerspectiveCamera xc nh c mt thuc tnh ring ca chnh n l FieldOfView .
OrthographicCamera cng nh ngha mt thuc tnh duy nht cng khai l Width , v cho

n mt thit lp mc nh l 2.
OrthographicCamera nh ngha mt mt phng chiu, mt phng chiu vung gc vi

vector LookDirection v nh hng ph hp vi cc thuc tnh UpDirection .


Nu cc Position l bt k im no trn trc Z tch dng, th cc LookDirection ch
vector theo hng trc Z m, v cc im vector UpDirection ch ln, b rng ngang ca
Viewport3D s hin th tt c mi th trn tr X ta t -Width / 2 n Width / 2, nh s

sau y minh chng.

Trang 22

Hnh 2-6:Cch xc nh OrthographicAerialView.


Cc file XAML sau ging ht trc nhng n thay PerspectiveCamera bng
OrthographicCamera.

OrthographicSquareCuboid.xaml
<!-- ===========================================================
OrthographicSquareCuboid.xaml (c) 2007 by Charles Petzold
=========================================================== -->
<Page xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
WindowTitle="Orthographic Square Cuboid"
Title="Orthographic Square Cuboid">
<Viewport3D>
<ModelVisual3D>
<ModelVisual3D.Content><Model3DGroup>
<GeometryModel3D>
<GeometryModel3D.Geometry>
<!-- Square cuboid sides in order:
front, left, top, right, bottom, rear. -->
<MeshGeometry3D
Positions="0 1

0, 0 0
0 1 -4,
1 1 -4,
1 1 0,
0 1 0,
1 1 -4,
TriangleIndices=" 0 1 2,
4
8

0, 1 1 0, 1 0 0,
0 0 -4, 0 1 0, 0 0 0,
0 1 -4, 1 1 0, 0 1 0,
1 0 0, 1 1 -4,1 0 -4,
0 0 0, 1 0 -4,0 0 -4,
1 0 -4, 0 1 -4,0 0 -4"
1 3
2,
5 6, 5 7
6,
9 10, 9 11 10,

12 13 14, 13 15 14,
16 17 18, 17 19 18,

Trang 23

20 21 22, 21 23 22"
</GeometryModel3D.Geometry>
<GeometryModel3D.Material>
<DiffuseMaterial Brush="Cyan"
</GeometryModel3D.Material>
<GeometryModel3D.BackMaterial>
<DiffuseMaterial Brush="Red" />
</GeometryModel3D.BackMaterial>
</GeometryModel3D>
<!-- Light sources. -->
<AmbientLight Color="#404040" />
<DirectionalLight Color="#C0C0C0" Direction="2 -3 -1" />
</Model3DGroup>
</ModelVisual3D.Content>
</ModelVisual3D>
<!-- Camera. -->
<Viewport3D.Camera>
<OrthographicCamera Position="-2 2 4"
LookDirection="2 -1 -4"
UpDirection="0 1 0"
Width="5" />
</Viewport3D.Camera>
</Viewport3D>
</Page>

Kt qu:

Hnh 2-7: Hnh hp s dng OrthographicCamera.


Nhn pha sau vt th c v ln hn pha trc, l mt o nh quang hc.

3. nh sng (Light)
Mt cnh 3D thnh cng cng ph thuc vo nh sng (Light), c bit l s tng tc ca
nh sng vi cc b mt ca vt th bng mt hiu ng c gi l bng (shading).
Trong chng ny, ti s cp n mu RGB thp lc phn bng cch s dng cc gi tr, chng
Trang 24

hn nh 00-FF-FF cho cyan. Khi ti c bit cp n mt mu sc RGB m c th xut hin


trong XAML, ti s s dng c php vn bn, chng hn nh "#00FFFF".
C 4 cch khai bo nh sng cho vt th:
Tn thuc tnh

Hot ng

DirectionLight

Chiu tia song song vo vt th t mt gc v cc.

PointLight

Bc x nh sng t mt im trong vt th.

SpotLight

Pht ra mt hnh nn ca nh sng t mt im trong vt th.

AmbientLight

Khuch tn nh sng trn b mt vt th.


Bng 2: Cc thuc tnh ca Light.

Thng thng hay s dng thuc tnh DirectionalLight nht. Hoc c th kt hp


nhiu kiu light trong cng mt ng dng.
3.1.

DirectionalLight

DirectionalLight ging nh mt ngun nh sng rt xa m cc tia sng chiu song song

vo vt th, nh nh sng t mt tri chiu xung tri t.


y l hnh nh minh ha cc DirectionalLight sau chiu xung trn mt mt cu:
<DirectionalLight Direction=1 -1 -0.5 Color=White/>

Hnh 3.1-1: Hnh minh ha s dng DirectionalLight.


Trang 25

Hnh nh to ra vi mt DirectionalLight duy nht thng nhn khng t nhin. Trong


th gii thc, ngay c khi nh sng i vo mt cnh no t mt hng duy nht. (Nh nh
nng), n thng b phn chiu li khong gia cc i tng. Mt cch gn ging nh nh
nng ny l c th thm mt AmbientLight cng thp.
3.2.

PointLight

PointLight ging nh mt bng n pht ra nh sng theo mi hng. Mt i tng


PointLight c mt v tr c bit trong khng gian 3D cc tia nh sng chiu trn b mt

phng nhiu gc :
<PointLight Color=White Position=2,2,2
ConstantAttenuation=0
LinearAttenuation=0
QuadraticAttenuation=0.125/>

Hnh 3.2-1: Hnh minh ha s dng PoinLight.


Khi dng PointLight n c v nh trong mt cn phng vi mt bng n trn treo t trn
nh, trung tm ca bc tng, trn v sn l vung gc vi nh sng v c chiu sng nht,
trong khi cc gc ca cn phng l ti hn
3.3.

SpotLight

SpotLight l ging nh n pin. Cc tia nh sng chiu trn b mt phng gc khc

nhau, nhng nh sng c gii hn trong mt hnh nn:


<SpotLight Color=Whitse Position=2,2,2
Direction=-1,-1,-1
InnerConeAngle=45
OuterConeAngle=90/>

Trang 26

Hnh 3.3-1: Hnh minh ha s dng SpotLight.


3.4.

AmbientLight

AmbientLights thng c s dng c tnh hiu qu ca nh sng m c phn

tn do phn chiu ca cc b mt khuch tn trong cnh. Tia sng t mt AmbientLight tt c


b mt c chiu t mi hng.

Hnh 3.4-1: Hnh minh ha s dng AmbientLight.


AmbientLights ch c mt thuc tnh duy nht l Color.
<AmbientLight Color=White/>

4. M t khng gian ta
Theo truyn thng v ha 3D, cc mt ca hnh khi c nh ngha bi mt khi a
gic,v 3D phi hp cc im b tr to thnh a gic. i vi mt phng, thng ch l mt
vi hnh a gic l cn thit, nhng b mt cong a gic i hi nhiu tnh gn ng cong ca
cc hnh v.
Trong WPF 3D, hnh thc n gin nht ca a gic l tam gic. Tam gic l rt hu ch trong
ha 3D. Bt k ba im khng trng v ba im khng gn nhau th ta xc nh mt tam gic.

Trang 27

Trong WPF 3D, 3D n gin bao gm mt hnh tam gic duy nht, chng hn nh hnh sau
trn mt phng YZ vi ba nh:

Hnh 4-1: Hnh nh tam gic trn mt phng.


Khi thit lp mt hnh nh 3D, cch n gin nht l to ra cc con s. Bn c th cho n xut
pht t tm, hoc t mt gc gc, hoc bt c v tr thun tin no. Cc n v ca khng gian
3D khng c ngha vt l, mi th u tng i.
Bn ch r nh ca tam gic v kt ni cc nh vi mt i tng ca MeshGeometry3D.
Hai yu t cn thit ca MeshGeometry3D l Positions v TriangleIndices , c hai u l
b su tp. Cc Positions cha cc nh ca hnh v TriangleIndices m t cch kt ni
nhng nh to thnh hnh tam gic.
Trc ht ta s xc nh cc im da trn h trc ta Oxyz.

Trang 28

0, 0, 0
0, 1, 0
1, 1, 0

Y
1
0, 1, 1

1, 1, 1
X
0

0, 0, 1

1, 0, 0

1, 0, 1

Hnh 4-2: Cch xc nh cc nh da trn h trc ta Oxyz.


Mt v d bng XAML: Positions l thuc tnh ca Point3DCollection v cha mt
i tng Point3D . Cc nh du sau y cho thy ba nh ca tam gic ny cch nhau bng du
phy, v TriangleIndices ch cha mt hnh tam gic duy nht, l ba im:
<MeshGeometry3D Positions = "0 0 0, 0 1 -1, 0 0 -2"
TriangleIndices = "0 1 2" />

TriangleIndices c xc nh bi mt tam gic vi im th nht, im th hai v im

th ba trong Positions.
Trnh t ca ba s nguyn trong TriangleIndices c s khc bit trong cch thc con s
xut hin. Mc d tam gic ny l bng phng, n tn ti trong khng gian ba chiu v n c mt
mt trc v mt mt sau. Bn c th lm mt trc v mt sau c mu sc khc nhau, c ngha
l bn phi phn bit gia chng mt cch no . Khi tam gic l nhn t pha trc, ba ch s
trong b TriangleIndices c xc nh cc nh ca tam gic theo hng ngc chiu.
Ly v d tp hp b su tp ca TriangleIndices l "1 2 0" hoc "2 0 1" l chnh xc ging
nh "0 1 2" bi v trong tt c cc trng hp, ba ch s cc nh ca tam gic theo hng ngc
chiu khi tam gic l nhn t pha trc.
Trang 29

Mt khc, nu bn c quy nh "0 2 1" hoc "2 1 0" hoc "1 0 2," pha bn ca tam gic i
din vi v tr trc X s c xem xt pha trc.
Trong WPF 3D th mi mt ca mt vt th c chia thnh hai mt: mt trc v mt sau.
Nu bn ni tam gic li theo chiu ngc chiu kim ng h th n c qui nh l mt trc v
ngc li, nu ni chiu kim ng h th n l mt sau, v n c m t bng hnh nh sau:

Hnh 4-3: Mt trc ca hnh vung

Hnh 4-4: Mt sau ca hnh vung

Cc i tng MeshGeometry3D nh ngha hnh hc ca hnh v. Bn cn xc nh mu cho


b mt ca i tng. i vi cng vic ny bn s dng mt i tng DiffuseMaterial.
Lp DiffuseMaterial l nhm cung cp cc Brush, xc nh cc gi tr mu ca Brush, bn
s thit lp thuc tnh Brush ca DiffuseMaterial vi mt trong nhng thuc tnh ch c
tnh ca lp Brushes:
<DiffuseMaterial Brush="Cyan" />

Cc MeshGeometry3D v hai i tng Material thuc GeometryModel3D , trong c


ba tnh cht thit yu: Cc Geometry l thuc tnh ca MeshGeometry3D , cn Material v
BackMaterial t mu cho mt trc v mt sau ca cc i tng.
<GeometryModel3D>
<GeometryModel3D.Geometry>
<MeshGeometry3D Positions = "0 0 0, 0 1 -1, 0 0 -2"
TriangleIndices = "0 1 2" />
</ GeometryModel3D.Geometry>
<GeometryModel3D.Material>

Trang 30

<DiffuseMaterial Brush="Cyan"/>
</ GeometryModel3D.Material>
<GeometryModel3D.BackMaterial>
<DiffuseMaterial Brush="Red"/>
</ GeometryModel3D.BackMaterial>
</ GeometryModel3D>

Trang 31

Chng 2: PHP BIN I HNH V HNH NH NG


1. Hnh nh ng
WPF c mt h thng h tr hnh nh ng a nng ch yu c xc nh trong namespase
System.Windows.Media.Animation v truy cp thun tin nht trong XAML bt c khi no

c th, c th bn s mun s dng mt trong nhiu lp ly ra t AnimationTimeline xc


nh hnh nh ng n gin.
Hnh nh ng trong WPF xut pht t lp AnimationTimeline trong namespase
System.Windows.Media.Animation . Cc lp ny cho php ng nhng thuc tnh trong lp

3D. Cc thuc tnh sau cho php ng:

Point3D (thuc tnh Position ca ProjectionCamera).

Vector3D (thuc tnh LookDirection v UpDirection ca ProjectionCamera,

hoc thuc tnh Direction ca DirectionalLight).

Double (thuc tnh FieldOfView ca PerspectiveCamera hoc thuc tnh Width

ca OrthographicCamera).
V d sau s cho thy lm th no ng thuc tnh Position:
BackAndForth1.xaml
<!-- ================================================
BackAndForth1.xaml (c) 2007 by Charles Petzold
================================================ -->
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
WindowTitle="Back and Forth #1"
Title="Back and Forth #1">
<Viewport3D>
<ModelVisual3D>
<ModelVisual3D.Content>
<Model3DGroup>
<GeometryModel3D>
<GeometryModel3D.Geometry>
<!-- Unit cube: front, back, left,
right, top, bottom. -->
<MeshGeometry3D
Positions="-0.5 0.5 0.5, 0.5 0.5 0.5,
-0.5 -0.5 0.5, 0.5 -0.5 0.5,
0.5 0.5
0.5 -0.5

Trang 32

-0.5,-0.5 0.5 -0.5,


-0.5,-0.5 -0.5 -0.5,

-0.5 0.5
-0.5 -0.5

-0.5,-0.5 0.5
-0.5,-0.5 -0.5

0.5 0.5
0.5 -0.5
-0.5
-0.5

0.5
0.5

0.5 -0.5
0.5 -0.5

0.5,
0.5,

0.5, 0.5 0.5 -0.5,


0.5, 0.5 -0.5 -0.5,
-0.5, 0.5
0.5, 0.5

0.5 -0.5,
0.5 0.5,

-0.5,-0.5 -0.5 -0.5,


0.5,-0.5 -0.5 0.5"

TriangleIndices=" 0 2 1,
4 6 5,
8 10 9,
12 14 13,
16 18 17,
20 22 21,
</GeometryModel3D.Geometry>
<GeometryModel3D.Material>
<DiffuseMaterial Brush="Cyan" />
</GeometryModel3D.Material>
</GeometryModel3D>
<!-- Light sources. -->
<AmbientLight Color="#404040" />
<DirectionalLight Color="#C0C0C0" Direction="2
</Model3DGroup>
</ModelVisual3D.Content>
</ModelVisual3D>

1
5
9
13
17
21

2
6
10
14
18
22

3
7,
11,
15
19
23" />

-3 -1" />

<Viewport3D.Camera>
<PerspectiveCamera x:Name="cam"
Position="0 1 6"
LookDirection="0 -1 -6"
UpDirection="0 1 0"
FieldOfView="45" />
</Viewport3D.Camera>
</Viewport3D>
<!-- Animation. -->
<Page.Triggers>
<EventTrigger RoutedEvent="Page.Loaded">
<BeginStoryboard>
<Storyboard TargetName="cam" TargetProperty="Position">
<Point3DAnimation From="-2 1 6" To="2 1 6"
Duration="0:0:2" AutoReverse="True"
RepeatBehavior="Forever" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Page.Triggers>
</Page>

Trang 33

PerspectiveCamera c t tn l "cam" n c th s dng trong Animation.


Animation c nh ngha di cng ca file XAML. N c kch hot bi s kin Loaded

ca lp Page, m xy ra khi trang c chy v kt xut trn mn hnh. Cc thuc tnh mc tiu
ca Animation l Position , Position l thuc tnh ca

loi Point3D. Cc lp

Point3DAnimation thay i v tr t (-2, 1, 6) n (2, 1, 6) trong hai giy, v sau o ngc

hnh nh ng v lp i lp li mi mi hoc cho n khi tt ng dng.


S thay i Position ca camera t (-2, 1, 6) n (2, 1, 6) lm cho khi lp phng di
chuyn t bn phi sang bn tri ca Viewport3D . Rt kh xc nh xem nhng con s hay my
nh thc s di chuyn.
Bn cng c th ng vi thuc tnh Direction ca DirectionalLight , vi mt thuc
tnh Vector3D . Cc file XAML sau s m phng bnh minh v hong hn trn mt hnh l p
phng vung:
SunriseSunset.xaml
<!-- ================================================
SunriseSunset.xaml (c) 2007 by Charles Petzold
================================================ -->
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
WindowTitle="Sunrise/Sunset"
Title="Sunrise/Sunset">
<Viewport3D>
<ModelVisual3D>
<ModelVisual3D.Content>
<Model3DGroup>
<GeometryModel3D>
<GeometryModel3D.Geometry>
<!-- Square cuboid. -->
<MeshGeometry3D
Positions="0 1 0, 0 0 0, 1 1 0, 1 0 0,
0 1 -4, 0 0 -4, 0 1 0, 0 0 0,
1 1 -4, 0 1 -4, 1 1 0, 0 1 0,
1 1 0, 1 0 0, 1 1 -4, 1 0 -4,
1 0 0, 0 0 0, 1 0 -4, 0 0 -4,
1 1 -4, 1 0 -4, 0 1 -4, 0 0 -4"
TriangleIndices=" 0 1 2, 1 3 2,
4 5 6, 5 7 6,
8 9 10, 9 11 10,
12 13 14, 13 15 14,
16 17 18, 17 19 18,
20 21 22, 21 23 22" />
</GeometryModel3D.Geometry>
<GeometryModel3D.Material>

Trang 34

<DiffuseMaterial Brush="Cyan" />


</GeometryModel3D.Material>
</GeometryModel3D>
<!-- Light. -->
<DirectionalLight x:Name="light" />
</Model3DGroup>
</ModelVisual3D.Content>
</ModelVisual3D>
<!-- Camera. -->
<Viewport3D.Camera>
<PerspectiveCamera Position="-2 2 4"
LookDirection="2 -1 -4"
UpDirection="0 1 0"
FieldOfView="45" />
</Viewport3D.Camera>
</Viewport3D>
<!-- Animations. -->
<Page.Triggers>
<EventTrigger RoutedEvent="Page.Loaded">
<BeginStoryboard>
<Storyboard TargetName="light">
<Vector3DAnimationUsingKeyFrames
Storyboard.TargetProperty="Direction">
<LinearVector3DKeyFrame KeyTime="0:0:0" Value="2 0 -1"/>
<LinearVector3DKeyFrame KeyTime="0:0:10" Value="0 -1 0"/>
<LinearVector3DKeyFrame KeyTime="0:0:20" Value=" -2 0 -1"/>
</Vector3DAnimationUsingKeyFrames>
<ColorAnimationUsingKeyFrames
Storyboard.TargetProperty="Color">
<LinearColorKeyFrame KeyTime="0:0:0" Value="Black" />
<LinearColorKeyFrame KeyTime="0:0:3" Value="White" />
<LinearColorKeyFrame KeyTime="0:0:17" Value="White" />
<LinearColorKeyFrame KeyTime="0:0:20" Value="Black" />
</ColorAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Page.Triggers>
</Page>

Hnh

nh

ng

ko

di

20

Vector3DAnimationUsingKeyFrames

giy

ng

khng
vi

lp

thuc

li.
tnh

Cc

Direction

tng
ca

DirectionalLight , DirectionalLight bt u t (2, 0, -1) m phng nh sng trn ng

chn tri, n im (0, -1, 0) nh sng i thng xung, v sau n im (-2, 0, -1) l hnh nh
c th hin vo lc hong hn.

Trang 35

Mt php ng hnh nh th hai l Color . DirectionalLight , i t en sang trng trong


ba giy u tin, v sau t trng n en trong ba giy cui cng.

2. Php bin i hnh


Bin i l mt phng php tip cn tng qut v c h thng sa i. Mt bin i v c
bn l mt cng thc ton hc p dng cho mi im trong mt b su tp, chng hn nh b su
tp Positions ca mt i tng MeshGeometry3D . Nhng im thc t trong b su tp
Positions khng thay i, nhng nhng ny im c s dng lm php bin i cho i

tng.
Khi bn s dng bn Windows Win32 API cho chng trnh ha hai chiu, cc ha
chuyn i l c im ca bi cnh thit b, trong ch yu l i din cho mt b mt hin th
nh mn hnh. Tt c cc i tng c v trn thit b ny chu s bin i c hiu lc ti thi
im i tng c v. Tng t nh vy, trong Windows Forms, cc bin i l mt thuc
tnh ca lp Graphics , l ng gi c a mt b mt v.
Trong WPF php bin i lun p dng cho cc i tng hn l vi b mt v. Ni cch
khc, bn khng lm bt c iu g Viewport3D thit lp bin i 3D. y c th l mt lo
ngi v Viewport3D c thuc tnh RenderTransform v LayoutTransform ca Transform.
Nhng Viewport3D tha hng nhng thuc tnh t FrameworkElement . y l nhng bin
i hai chiu ca loi Transform v iu chnh v tr, kch thc, v vng quay c a
Viewport3D .

i vi bin i ba chiu, bn s dng cc lp ly t cc lp Transform3D tru tng.


Chnh xc ba lp trong namespase System.Windows.Media.Media3D xc nh tnh cht
chuyn i ca loi Transform3D :

Camera.

Model3D.

ModelVisual3D .
Camera l lp tru tng cho tt c cc lp camera, bao gm c PerspectiveCamera v
OrthographicCamera .

Trang 36

Model3D l lp tru tng ca cc lp GeometryModel3D , Light , v Model3DGroup .

Cc thuc tnh Transform cho php bn p dng mt bin i n mt con s duy nht hoc
ngun nh sng, cng nh mt b su tp ca cc i tng Model3D .
ModelVisual3D l lp ch xut pht t lp Visual3D tru tng. Bng cch thit lp thuc

tnh Transform ca ModelVisual3D , bn c th p dng bin i mi th trong


ModelVisual3D , c th l mt con s duy nht, mt tp hp cc s liu, hoc con s cng vi

cc ngun nh sng, v cng c th bao gm cc i tng con ca ModelVisual3D .


Lp Transform3D hin trong h thng cp bc cc lp sau:
Object
DispatcherObject (abstract) DependencyObject
Freezable (abstract)
Animatable (abstract)
Transform3D(abstract)
AffineTransform3D (abstract)
TranslateTransform3D (sealed)
ScaleTransform3D (sealed)
RotateTransform3D (sealed)
MatrixTransform3D (sealed)
Transform3DGroup(sealed)

Trong chng ny chng ta s i vo bn loi bin i:


Hot ng

Tn thuc tnh
TranlateTransform3D

Di chuyn v tr ca mt vt th

ScaleTransform3D

Thay i kch thc ca mt vt th

RotateTrasform3D

Xoay vt th xung quanh mt trc

MatrixTransform3D

Bin i i tng bng mt ma trn


Bng 3: Cc thuc tnh bin i.

Trang 37

2.1.

Php dch chuyn (TranslateTranform3D)

TranslateTransform3D l loi chuyn i m n gin ch l di chuyn mt vt th vo

mt v tr khc m khng thay i kch thc hoc nh hng ca n. Lp


TranslateTransform3D nh ngha ba thuc tnh ca loi double vi gi tr mc nh l 0:
OffsetX , OffsetY , v OffsetZ . Bn c th p dng mt TranslateTransform3D cho mt

yu t GeometryModel3D.
<GeometryModel3D>

<GeometryModel3D.Transform>
<TranslateTransform3D OffsetX="2" OffsetY="0" OffsetZ=" -1" /;>
</GeometryModel3D.Transform>
</GeometryModel3D>

Cc con s c m t bi cc GeometryModel3D l c hiu qu nu nh khi bn thm vo


ta X l 2 v ta Z l -1 ca tt c cc im trong b su tp Positions ca
MeshGeometry3D gn lin vi hnh v.

Ni chung, bin i mt tnh ton mt im (x', y', z') t mt im (x, y, z). Lp


TranslateTranform3D lin quan n cng thc sau:

Hnh 2.1-1: Cch tham chiu trn h trc ta v mt vt th.


Trang 38

Chng trnh TranslateTransformExperimenter .xaml cho php bn th nghim vi


TranslateTransform3D . Chng trnh v ra mt vt th ni gia cc on thng n gin nh

hnh sau:
5 (2, 1, -3)
6 (2, 0, -3)
4 (2, 1, 0)
1 (0, 0, -3)

3 (2, 0, 0)

2 (0, 0, 0)

Hnh 2.1-2: Hnh nh c v bng cch ni cc on thng.


N l mt n v cao, hai n v rng, v ba n v su. Gc bn tri pha trc l gc.
Chng trnh c ba thanh trt trn u trang thay i OffsetX , OffsetY , v OffsetZ
thuc tnh ca mt TranslateTransform3D p dng cho GeometryModel3D . Ba thanh cun

thay i cc thuc tnh pha di cng ca mt TranslateTransform3D p dng cho


PerspectiveCamera .
TranslateTransformExperimenter.xaml
<!-- =================================================================
TranslateTransformExperimenter.xaml (c) 2007 by Charles Petzold
================================================================= -->
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
WindowTitle="TranslateTransform3D Experimenter"
Title="TranslateTransform3D Experimenter">
<DockPanel>
<ScrollBar Name="xMod" DockPanel.Dock="Top" Orientation="Horizontal"

Trang 39

Minimum="-5" Maximum="5" Value="0" ToolTip="Model X"


/>
<ScrollBar Name="yMod" DockPanel.Dock="Top" Orientation="Horizontal"
Minimum="-5" Maximum="5" Value="0" ToolTip="Model Y"
/>
<ScrollBar Name="zMod" DockPanel.Dock="Top" Orientation="Horizontal"
Minimum="-5" Maximum="5" Value="0" ToolTip="Model Z"
/>
<ScrollBar Name="zCam" DockPanel.Dock="Bottom" Orientation="Horizontal"
Minimum="-5" Maximum="5" Value="0" ToolTip="Camera Z"
/>
<ScrollBar Name="yCam" DockPanel.Dock="Bottom" Orientation="Horizontal"
Minimum="-5" Maximum="5" Value="0" ToolTip="Camera Y"
/>
<ScrollBar Name="xCam" DockPanel.Dock="Bottom" Orientation="Horizontal"
Minimum="-5" Maximum="5" Value="0" ToolTip="Camera X"
/>
<Viewport3D>
<ModelVisual3D>
<ModelVisual3D.Content>
<Model3DGroup>
<GeometryModel3D>
<GeometryModel3D.Geometry>
<!-- Front, rear, top, right, bottom.
<MeshGeometry3D
Positions="0
0
2
2
2

-->
0 0, 2 0 0, 2 1 0,
0 -3, 2 0 -3, 2 1 -3,
1 -3, 0 0 -3, 2 1 0, 0 0 0,
1 0, 2 0 0, 2 1 -3, 2 0 -3,
0 0, 0 0 0, 2 0 -3, 0 0 -3"

TriangleIndices=" 0 1 2,
3 5 4,
6 7 8, 7 9 8,
10 11 12, 11 13 12,
14 15 16, 15 17 16" />
</GeometryModel3D.Geometry>
<GeometryModel3D.Material>
<DiffuseMaterial Brush="Cyan" />
</GeometryModel3D.Material>
<GeometryModel3D.Transform>
<Transform3DGroup>
<TranslateTransform3D
OffsetX="{Binding ElementName=xMod,
Path=Value}"
OffsetY="{Binding ElementName=yMod,
Path=Value}"
OffsetZ="{Binding ElementName=zMod,
Path=Value}" />
</Transform3DGroup>
</GeometryModel3D.Transform>
</GeometryModel3D>
<!-- Light sources. -->

Trang 40

<AmbientLight Color="#404040" />


<DirectionalLight Color="#C0C0C0" Direction="2 -3 -1">
<DirectionalLight.Transform>
<Transform3DGroup>
<!-- Placeholder for light transform. -->
</Transform3DGroup>
</DirectionalLight.Transform>
</DirectionalLight>
<Model3DGroup.Transform>
<Transform3DGroup>
<!-- Placeholder for group transform. -->
</Transform3DGroup>
</Model3DGroup.Transform>
</Model3DGroup>
</ModelVisual3D.Content>
<ModelVisual3D.Transform>
<Transform3DGroup>
<!-- Placeholder for visual transform. -->
</Transform3DGroup>
</ModelVisual3D.Transform>
</ModelVisual3D>
<!-- Camera. -->
<Viewport3D.Camera>
<PerspectiveCamera Position="-2 2 4"
LookDirection="2 -1 -4"
UpDirection="0 1 0"
FieldOfView="45">
<PerspectiveCamera.Transform>
<Transform3DGroup>
<TranslateTransform3D
OffsetX="{Binding ElementName=xCam,
Path=Value}"
OffsetY="{Binding ElementName=yCam,
Path=Value}"
OffsetZ="{Binding ElementName=zCam,
Path=Value}" />
</Transform3DGroup>
</PerspectiveCamera.Transform>
</PerspectiveCamera>
</Viewport3D.Camera>
</Viewport3D>
</DockPanel>
</Page>

Viewport3D y l trung tm ca mt DockPanel . pha trn l ba ScrollBar iu

khin, v di ba ScrollBar v su ca vt th. Su ScrollBar u c khong t -5 n


5. Ba ScrollBar u trang c tn "xMod ", "yMod ", v "zMod ", chuyn i v
GeometryModel3D :
<GeometryModel3D.Transform>
<Transform3DGroup>

Trang 41

<TranslateTransform3D
OffsetX="{Binding ElementName=xMod, Path=Value}"
OffsetY="{Binding ElementName=yMod, Path=Value}"
OffsetZ="{Binding ElementName=zMod, Path=Value}" />
</Transform3DGroup>
</GeometryModel3D.Transform>

TranslateTransform3D gm c OffsetX , OffsetY , v OffsetZ thuc tnh ca n thit

lp gn d liu gi tr gia tng ca ba ScrollBar u trang. Mt bin i p dng cho mt


GeometryModel3D nh hng n tt c cc im trong b su tp Positions c xc nh

bi MeshGeometry3D . Khi bn di chuyn ScrollBar trn cng v bn phi, s bin i vt th


v bn phi dc theo trc X. Bn cng c th thit lp gi tr m OffsetX bng cch di chuyn
thanh cun v bn tri. Tng t nh vy, cc gi tr dng ca OffsetY di chuyn vt th ln,
v cc gi tr dng ca OffsetZ di chuyn con s gn hn v pha ngi xem.
Cc thanh cun di cng ca trang c lin kt vi mt TranslateTransform3D p dng
cho Camera:
<PerspectiveCamera.Transform>
<Transform3DGroup>
<TranslateTransform3D
OffsetX="{Binding ElementName=xCam, Path=Value}"
OffsetY="{Binding ElementName=yCam, Path=Value}"
OffsetZ="{Binding ElementName=zCam, Path=Value}" />
</Transform3DGroup>
</PerspectiveCamera.Transform>

Bin i ny nh hng n cc thuc tnh Position ca my nh. Khi bn di chuyn thanh


cun u ca ba thanh cun pha di sang bn phi, my nh ny s di chuyn sang phi v con
s ny dng nh di chuyn sang tri. Ni chung, mt bin i p dng cho mt my nh thc
hin kt qu nghch o ca so vi mt bin i p dng cho mt vt th 3D.
2.2.

Php bin i kch thc (ScaleTransform3D)

ScaleTransform3D ny lm cho mt vt th ln hn hoc nh hn bng cch nhn X, Y, v

Z ca n ta thuc tnh c t tn ScaleX, ScaleY , v ScaleZ , tt c u c gi tr mc


nh l 1. Di y l cch ScaleTransform3D c th xut hin trong XAML bin i mt
GeometryModel3D :
<GeometryModel3D>

<GeometryModel3D.Transform>

Trang 42

<ScaleTransform3D ScaleX="3" ScaleY="1" ScaleZ="2" />


</GeometryModel3D.Transform>
</GeometryModel3D>

Vt th ny c m rng kch thc theo trc X l 3 v tng gp i kch thc dc theo


trc Z. Thuc tnh ScaleY thit lp gi tr mc nh ca n v c th c g b. Cch thc
chuyn i cng thc l:
=
=
=
Tuy nhin, y khng phi l cng thc thay i kch thc hon chnh. Bn c th thay i
kch thc bng cch thay i ba thuc tnh ca ScaleTransform3D tn CenterX , CenterY,
v CenterZ , tt c u c gi tr mc nh l 0. Cch thc chuyn i bng cc cng thc:
= +
= +
= +
Hy ly mt v d: Gi s mt i tng 3D c cc gi tr X khong t 0 n 2. Nu ScaleX
l 2, cc gi tr ny s chuyn i khong t 0 n 4. Nhng nu CenterX c thit lp l 1, X
ban u gi tr 0 l gim i bi 1 c -1, sau nhn vi 2 c -2, v sau CenterX
c thm vo l -1. Gi tr X ca 2 l gim i bi CenterX c 1, nhn vi 2 c 2, v sau
c thm mt ln na CenterX c 3. Cc i tng chuyn by gi ko di dc theo trc X
t -1 n 3. N vn cn tng gp i kch thc, nhng l mt phn ca i tng trong X
l gi tr ca 1 CenterX .
Bn c th thm trc tip cc thuc tnh sau y vo ScaleTransform3D trong file XAML:
CenterX = "1" CenterY = "0,5" CenterZ = "-1,5"

Kt hp php dch chuyn v php bin i


Ngi ta thng p dng nhiu bin i trong cng mt m hnh hay hnh nh. lm iu
ny, bn cn phi xc nh cc bin i bin i trong Transform3DGroup :
<GeometryModel3D.Transform>
<Transform3DGroup>
...
</Transform3DGroup>
</ GeometryModel3D.Transform>

Trang 43

Transform3DGroup ny c th c nhiu bin i bn trong, cc php bin i tng ng

vi php nhn ma trn, v khng phi l php nhn ma trn giao hon. Trnh t cc bin i xut
hin trong Transform3DGroup s c thc hin khc nhau.
i vi nhiu bin i ca TranslateTransform3D , kt qu ch n gin l tng ca thuc
tnh OffsetX , OffsetY , v OffsetZ . Nu mt Transform3DGroup c cha nhiu lin kt
TranslateTransform3D lin tip vi gi tr r rng, th c th ci thin kt qu bng cch kt

hp chng li thnh mt. Tuy nhin, nu mt TranslateTransform3D c bit b nh hng


bi mt d liu rng buc hoc hnh nh ng, c th s khng c kh nng kt hp n vi cc
bin i khc.
Tng

t,

nu

cc

thuc

tnh

CenterX ,

CenterY ,

CenterZ

ca

mt

ScaleTransform3D vi gi tr mc nh l 0, tng ng ScaleTransform3D vi mt

chuyn i ch cha cc thuc tnh ScaleX , ScaleY , v ScaleZ.


Nhng kt hp mt TranslateTransform3D v mt ScaleTransform3D , hoc quy m
nhiu bin i vi cc tm im khng phi mc nh, v bn thc s cn phi bit nhng g bn
ang lm.
Trng hp kt hp mt TranslateTransform3D v mt ScaleTransform3D vi tm
im mc nh. Nu TranslateTransform3D thc hin trc, cc cng thc chuyn i l:
= +
= +
= +
Cc ScaleTransform3D (vi tm im mc nh) sau c tng hp l:
= = ( + )
= = ( + )
= = ( + )
By gi hy th th t khc. Cc ScaleTransform3D thc hin trc:
=
=
=
Trang 44

Cc TranslateTransform3D:
= + = +
= + = +
= + = +
Trong thc t, cc thuc tnh CenterX , CenterY , v CenterZ ca ScaleTransform3D c
th c hnh dung nh l mt bin i kp ni mt bin i dch chuyn c thc hin trc v
sau l php bin i kch thc. y l mt bin i kch thc vi tt c cc thuc tnh ca n
thit lp cc gi tr tng trng:
<ScaleTransform3D ScaleX="SX" ScaleY="SY" ScaleZ="SZ"
CenterX="CX" CenterY="CY" CenterZ="CZ" />

iu tng ng vi:
<TranslateTransform3D OffsetX="-CX" OffsetY="-CY" OffsetZ="-CZ" />
<ScaleTransform3D ScaleX="SX" ScaleY="SY" ScaleZ="SZ" />
<TranslateTransform3D OffsetX="CX" OffsetY="CY" OffsetZ="CZ" />

N cng tng ng vi:


<ScaleTransform3D ScaleX="SX" ScaleY="SY" ScaleZ="SZ" />
<TranslateTransform3D OffsetX="CX(1-SX)" OffsetY="CY(1-SY)" OffsetZ="CZ(1-SZ)" />

Hoc:
<TranslateTransform3D OffsetX="CX/SZ-CX" OffsetY="CY/SY-CY" OffsetZ="CZ/SZ-CZ" />
<ScaleTransform3D ScaleX="SX" ScaleY="SY" ScaleZ="SZ" />

Trong mt s trng hp, bn c th kt hp mt ScaleTransform3D v


TranslateTransform3D theo nhng cch lm gim tng s bin i.
2.3.

Php xoay (RotateTransform3D)

Loi bin i tip theo l xoay. V khi nim v c php th php xoay phc tp hn php dch
chuyn v php bin i kch thc. Kt hp ca php quay ti mt s mt phng c th rt phc
tp v th n s dng mt cng c ton hc c bit c gi l quaternion . Tuy nhin, bn
thn cc quaternion ny cng rt phc tp.
Php xoay ny bao gm hai phng php c bn l xoay theo trc v gc hoc xoay bng
mt php ton c tn l Quaternion.
2.3.1. Trc v gc

Lp RotateTransform3D nh ngha bn c tnh. Ging nh ScaleTransform3D ,


RotateTransform3D cng nh ngha cc thuc tnh CenterX , CenterY , v CenterZ vi gi
Trang 45

tr mc nh bng 0. N cng ch ra mt im trn mt phng khi xoay. Nhng php xoay c


nh ngha trong lp tru tng Rotation3D nh c hin th trong h thng sau y:
Object
DispatcherObject (abstract)
DependencyObject
Freezable (abstract)
Animatable (abstract)
Rotation3D (abstract)
AxisAngleRotation3D (sealed)
QuaternionRotation3D (sealed)

Cc khai bo cho mt RotationTransform3D th di hn cc bin i khc:


<RotateTransform3D >
<RotateTransform3D.Rotation>
<AxisAngleRotation3D />
</RotateTransform3D.Rotation>
</RotateTransform3D>

Bn c th trnh yu t ny nu i tng s hu Rotation3D c xc nh hoc kim sot


bi mt Rotation3DAnimation .
Trong

RotateTransform3D .Rotation

kha

bn

ch

nh

mt

AxisAngleRotation3D hoc mt QuaternionRotation3D . Nh tn cho thy, mt con s


AxisAngleRotation3D quay quanh mt trc c tnh bng .
AxisAngleRotation3D nh ngha hai thuc tnh. Cc thuc tnh Axis l ca loi
Vector3D v c gi tr mc nh l (0, 1, 0), m vector theo hng trc Y dng. Xoay quanh

mt trc song song vi vector . Thuc tnh th hai l Angle, l gc quay.


Nu bn b cc thuc tnh CenterX, CenterY , v CenterZ c xc nh bi
RotateTransform3D mc nh ca chng l 0, mc nh gi tr ca Axis (0, 1, 0) to ra con s

xoay quanh trc Y. Bn c th xc nh ng thng m thc s nm t CenterZ v


CenterX ca i tng RotateTransform3D . Tt c cc im ca vt th (CenterX, y,
CenterZ ) vn cng mt v tr trong thi gian quay. Tng t nh vy, nu gi tr Axis l (1, 0,

0), tt c cc im ca vt th (x, CenterY, CenterZ ) vn cng mt ch. Nu gi tr Axis l


(0, 0, 1), tt c cc im ca vt th (CenterX, CenterY, z ) khng thay i.
Bn cng c th ch nh mt gi tr Axis khng song song vi trc X, Y, hay Z, v d, (1, 1,
0). l mt vector hng v pha trn bn phi.

Trang 46

Xoay quanh trc bt k c th c thc hin mt trong hai cch: xoay theo chiu kim ng
h v quay ngc chiu kim ng h. Nu bn tr ngn tay ci ca bn tay phi ca bn theo
hng ca vector Axis, cc ng cong ca ngn tay khc ch hng quay theo cc gi tr gc
dng.
V d, gi s gi tr Axis l (0, 0, 1), v cc CenterX , CenterY , v CenterZ cha c thay
i gi tr mc nh. Php quay xy ra xoay quanh trc Z. Angle dng gy ra cc gi tr im
trn trc dng X sau di chuyn v hng trc dng Y, v cc im trn trc dng Y s di
chuyn v hng trc m X... y l mt vng quay ca 30 :

Hnh 2.3.1-1: Vt th c xoay vi mt gc 30 .


Nu bn mun xy ra kt qu quay theo hng ngc li, th c hai cch hoc s dng cc m
ca Axis (0, 0, -1), hoc s dng gi tr m Angle. y php quay xung quanh (0, 0, -1) ca 30
, hoc mt php quay xung quanh (0, 0, 1) ca -30 :

Hnh 2.3.1-2: Vt th c xoay vi mt gc -30 .


Chng trnh sau y cho php bn th nghim vi trc quay:
AxisRotationExperimenter.xaml
<!-- ===========================================================
AxisRotationExperimenter.xaml (c) 2007 by Charles Petzold

Trang 47

=========================================================== -->
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
WindowTitle="AxisAngleRotation3D Experimenter"
Title="AxisAngleRotation3D Experimenter">
<DockPanel>
<ScrollBar Name="xMod" DockPanel.Dock="Top" Orientation="Horizontal"
Minimum="-180" Maximum="180" LargeChange="10" Value="1"
ToolTip="X Model" />
<ScrollBar Name="yMod" DockPanel.Dock="Top" Orientation="Horizontal"
Minimum="-180" Maximum="180" LargeChange="10" Value="1"
ToolTip="Y Model" />
<ScrollBar Name="zMod" DockPanel.Dock="Top" Orientation="Horizontal"
Minimum="-180" Maximum="180" LargeChange="10" Value="1"
ToolTip="Z Model" />
<ScrollBar Name="zCam" DockPanel.Dock="Bottom" Orientation="Horizontal"
Minimum="-180" Maximum="180" LargeChange="10" Value="1"
ToolTip="Z Camera" />
<ScrollBar Name="yCam" DockPanel.Dock="Bottom" Orientation="Horizontal"
Minimum="-180" Maximum="180" LargeChange="10" Value="1"
ToolTip="Y Camera" />
<ScrollBar Name="xCam" DockPanel.Dock="Bottom" Orientation="Horizontal"
Minimum="-180" Maximum="180" LargeChange="10" Value="1"
ToolTip="X Camera" />
<Viewport3D>
<ModelVisual3D>
<ModelVisual3D.Content>
<Model3DGroup>
<GeometryModel3D>
<GeometryModel3D.Geometry>
<!-- Front, rear, top, right, bottom. -->
<MeshGeometry3D
Positions="0 0 0, 2 0 0, 2 1 0,
0 0 -3, 2 0 -3, 2 1 -3,
2 1 -3, 0 0 -3, 2 1 0, 0 0 0,
2 1 0, 2 0 0, 2 1 -3, 2 0 -3,
2 0 0, 0 0 0, 2 0 -3, 0 0 -3"
TriangleIndices=" 0 1 2,
3 5 4,
6 7 8, 7 9 8,
10 11 12, 11 13 12,
14 15 16, 15 17 16" />
</GeometryModel3D.Geometry>
<GeometryModel3D.Material>
<DiffuseMaterial Brush="Cyan" />
</GeometryModel3D.Material>
<GeometryModel3D.Transform>
<Transform3DGroup>
<RotateTransform3D>
<RotateTransform3D.Rotation>
<AxisAngleRotation3D Axis="1 0 0"

Trang 48

Angle="{Binding ElementName=xMod,
Path=Value}" />
</RotateTransform3D.Rotation>
</RotateTransform3D>
<RotateTransform3D>
<RotateTransform3D.Rotation>
<AxisAngleRotation3D Axis="0 1 0" Angle="{Binding ElementName=yMod,
Path=Value}" />
</RotateTransform3D.Rotation>
</RotateTransform3D>
<RotateTransform3D>
<RotateTransform3D.Rotation>
<AxisAngleRotation3D Axis="0 0 1"

Angle="{Binding ElementName=zMod,
Path=Value}" />

</RotateTransform3D.Rotation>
</RotateTransform3D>
</Transform3DGroup>
</GeometryModel3D.Transform>
</GeometryModel3D>
<!-- Light sources. -->
<AmbientLight Color="#404040" />
<DirectionalLight Color="#C0C0C0" Direction="2 -3 -1">
<DirectionalLight.Transform>
<Transform3DGroup>
<!-- Placeholder for light transform. -->
</Transform3DGroup>
</DirectionalLight.Transform>
</DirectionalLight>
<Model3DGroup.Transform>
<Transform3DGroup>
<!-- Placeholder for group transform. -->
</Transform3DGroup>
</Model3DGroup.Transform>
</Model3DGroup>
</ModelVisual3D.Content>
<ModelVisual3D.Transform>
<Transform3DGroup>
<!-- Placeholder for visual transform. -->
</Transform3DGroup>
</ModelVisual3D.Transform>
</ModelVisual3D>
<!-- Camera. -->
<Viewport3D.Camera>
<PerspectiveCamera Position="-2 2 4"
LookDirection="2 -1 -4"
UpDirection="0 1 0"
FieldOfView="45">
<PerspectiveCamera.Transform>
<Transform3DGroup>
<RotateTransform3D>

Trang 49

<RotateTransform3D.Rotation>
<AxisAngleRotation3D Axis="1 0 0"

Angle="{Binding ElementName=xCam,
Path=Value}" />

</RotateTransform3D.Rotation>
</RotateTransform3D>
<RotateTransform3D>
<RotateTransform3D.Rotation>
<AxisAngleRotation3D Axis="0 1 0"

Angle="{Binding ElementName=yCam,
Path=Value}" />

</RotateTransform3D.Rotation>
</RotateTransform3D>
<RotateTransform3D>
<RotateTransform3D.Rotation>
<AxisAngleRotation3D Axis="0 0 1"

Angle="{Binding ElementName=zCam,
Path=Value}" />

</RotateTransform3D.Rotation>
</RotateTransform3D>
</Transform3DGroup>
</PerspectiveCamera.Transform>
</PerspectiveCamera>
</Viewport3D.Camera>
</Viewport3D>
</DockPanel>
</Page>

Ba thanh trt u trang c lin kt vi mt thuc tnh Angle ca mt nguyn t


AxisAngleRotation3D khc nhau. Ba yu t AxisAngleRotation3D c thuc tnh Axis

thit lp l (1, 0, 0), (0, 1, 0), v (0, 0, 1), do , ba thanh cun xoay quanh trc X, Y, v Z tng
ng. Di chuyn thanh cun bn phi lm tng Angle t 0 n180 , di chuyn mi thanh cun
bn tri lm cho cc thuc tnh Angle gim t 0 n -180 .
Bt k quay nh th no, gc tri pha trc ca vt th ny vn cn gi nguyn ti gc. Bn
c th thay i ba yu t RotateTransform3D p dng cho cc GeometryModel3D nh sau:
<RotateTransform3D CenterX="1" CenterY="0.5" CenterZ="-1.5">

By gi tm ca vt th ny vn cn gi nguyn. Thit lp mt thuc tnh CenterX l khng


cn thit khi quay quanh trc X, bi v khi xoay quanh truc X th tt c cc gi tr X vn lun lun
gi nguyn. Quy tc tng t p dng cho cc thuc tnh CenterY v CenterZ .
Ba thanh cun di cng ca trang p dng cho my nh. Nh bn thy, hiu qu ca php
xoay c o ngc bi v my nh ny ang c quay ch khng phi l hnh v c quay.
Camera quay xung quanh im ( CenterX , CenterY , CenterZ ).
Trang 50

Trong ba php quay p dng cho my nh, thay i cc yu t RotateTransform3D nh


sau:
<RotateTransform3D CenterX="1" CenterZ="-10">

Bn c hiu qu c th xoay camera xung quanh vt th v xem n t pha sau nhng


khong cch xa hn.
Khi bn tng thanh cun u tin, cc vector Direction quay xung quanh mt ng song
song vi trc X n ch theo hng Z m. Khi bn tng thanh cun th ba, vector Direction
quay xung quanh mt ng song song vi trc Z n c nhiu im hn theo hng X dng.
Cc

thuc

tnh CenterX , CenterY , v CenterZ khng c

hiu lc

trn mt

RotateTransform3D p dng cho mt DirectionalLight .

Khi thc hin xoay Model3DGroup hoc ModelVisual3D th nh sng s quay theo vi n,
v b mt chiu sng trn vt th vn khng i.
2.3.2. Ton Quaternion
Xoay l mt trong nhng nhim v ph bin nht ca lp trnh ha 3D, nhng cng l
nhim v y ton hc nht. May mn l c s tin li ca lp RotateTransform3D v
AxisAngleRotation3D . Khi s dng kt hp, hai lp ny cho php bn xc nh mt vng

quay bng cch xc nh cc trc quay, mt gc quay xung quanh trc, v mt tm quay ty chn.
Thng thng khi bn xc nh mt hnh nh ng lin quan n AxisAngleRotation3D ,
bn ch quan tm n thay i Angle trong khi vn gi Axis khng i.
Quaternion l mt cch khc nh ngha php quay trong khng gian 3D vi li th ln l
c th thng nht vn tc gc, y l mt hiu ng m c th khng c bt chc mt cch d
dng vi mt trc quay.
Cc tin li ca s phc
Cc ng lc cho quaternion xut pht t nhim v tng i n gin quay trong hai chiu.
Hy bt u vi cc tiu chun Cartesian phi hp h thng:

Trang 51

Hnh 2.3.2-1: Cc im x, y trn h trc ta Oxy.


Bt k im no trong mt phng ny c th c biu din nh cc cp s (x, y). Nu bn v
mt ng t ngun gc n ti v tr c ta x, y, th ta s c ng thng c chiu di r v
mt gc (theta) vi trc X dng:

Hnh 2.3.2-2: Gc v ng thng ca im x,y trn h trc Oxy.


y l mt i din khc ca im trong h ta cc. Bn c th tnh ton r v nh sau:
r=

tan() =

Ngoi ra, bn c th th hin x v y trong iu khon ca r v . n gin ch cn chiu 2


ng thng ln trn cc trc X v Y:
Trang 52

Hnh 2.3.2-3: Cch khc xc nh 2 im x,y.


Cc im (x, y) cng l im (r.cos (), r.sin ()).
S phc bt ngun t phng trnh bc 2: x2 + 1 = 0.
S phc c l tng ca s thc a cng vi s thc b nhn vi i: c = a + bi, v c chia thnh 2
phn, mt phn thc(real) v mt phn o(imaginaries). Nu bn xc nh trc ngang ca mt
phng l s thc v trc ng ca mt phng l s o th ta c c s phc nh hnh sau:

Hnh 2.3.2-4: S phc trn h trc ta s phc.


Tng t ta s tnh c s phc ny da vo gc nh sau :

Trang 53

Hnh 2.3.2-5: S phc vi gc .


Bn c th cng v tr s phc bng cch n gin l cng v tr hai phn tng ng phn
thc v phn o vi nhau.
M rng s phc ra khng gian ba chiu vi ba vector n v i, j, k vi i = (1, 0 , 0), j = (0, 1,
0), k = (0, 0, 1). V php nhn vector nh sau:
ixj= k= -jxi
j x k = i = -k x j
kxi=j= - i xk
Ton Qua tec non c qui tc nhn tng t, tuy nhin, trong php nhn quaternion th mt
vector nhn vi chnh n bng -1. V tng ca mt qua tec non l tng ca mt s thc cng vi
ba con s o:
q = a + bi + cj + dk
T

ta

xc

nh

cu

trc

ca

mt

quaternion.

Trong

namespace

System.Windows.Media.Media3D th cc thuc tnh c tn l w, x, y, z v q c xc nh

nh sau:
q = w + xi + yj + zk
Bn c th khai bo mt quaternion nh sau:
Quaternion q = new Quaternion(x, y, z, w);

Trang 54

Quaternion l php bin i phc tp nht, tnh ton quaternion ca mt vng quay vector
trc v cc gc quay, vect trc phi l vector bnh thng. Bn c th tnh ton quaternion thnh
phn t mt n v trc quay v gc quay. Gi s trc quay cho mt vng quay 3D c k hiu
l mt n v Vector3D i tng (ax, ay, az) v gc quay l . Bn c th tm thy nhng
quaternion gm c 4 gi tr (x, y, z, w) bng cch s dng cng thc sau:
x = ax.sin(/2)
y = ay.sin(/2)
z = az.sin(/2)
w = cos(/2)
Cu trc ton qua tec non bao gm mt constructor to ra mt ton quaternion quay t mt
trc quay v mt gc:
Quaternion qRotate = new Quaternion(vectAxis, angle);

Lp RotateTransform3D nh ngha mt thuc tnh c tn Rotation m c thit lp


cho mt i tng ca loi Rotation3D , v l mt lp tru tng cho AxisAngleRotation3D
v QuaternionRotation3D . QuaternionRotation3D c mt thuc tnh duy nht c tn
Quaternion ca loi Quaternion . Trong XAML, n c m t nh sau:
<RotateTransform3D>
<RotateTransform3D.Rotation>
<QuaternionRotation3D Quaternion="0 0 0.5 0.866" />
</RotateTransform3D.Rotation>
</RotateTransform3D>

l mt vng quay 60 quanh trc Z, s 0.5 l sin 30 , v 0.866 l cosin ca 30 .


Trong XAML, w ng cui cng. Bn c th ty chn ch nh tm cho vic lun chuyn trong
th RotateTransform3D .
Chng trnh sau lm cho hnh nh ng bng Quaternion da vo i tng
RotateTranform3D :
<Window x:Class="Transform1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" mc:Ignorable="d"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup -compatibility/2006"
Height="350" Width="524"
WindowState="Maximized" >

Trang 55

<Viewport3D>
<Viewport3D.Camera>
<PerspectiveCamera Position="-2 1 4" LookDirection="2 -1 -4"
UpDirection="0 1 0" FieldOfView="90"/>
</Viewport3D.Camera>
<ModelVisual3D>
<ModelVisual3D.Content>
<Model3DGroup>
<DirectionalLight Color="White" Direction="2 -1 0"/>
<GeometryModel3D>
<GeometryModel3D.Geometry>
<MeshGeometry3D Positions="0 1 0, 0 0 0, 1 1 0, 1 0 0,
0 1 -1, 0 0 -1, 0 1 0, 0 0 0,
1 1 -1, 0 1 -1, 1 1 0, 0 1 0,
1 1 0, 1 0 0, 1 1 -1, 1 0 -1,
1 0 0, 0 0 0, 1 0 -1, 0 0 -1,
1 1 -1, 1 0 -1, 0 1 -1, 0 0 -1"
TriangleIndices=" 0 1 2, 1 3 2,
4 5 6, 5 7 6,
8 9 10, 9 11 10,
12 13 14, 13 15 14,
16 17 18, 17 19 18,
20 21 22, 21 23 22" />
</GeometryModel3D.Geometry>
<GeometryModel3D.Material>
<DiffuseMaterial Brush="Cyan"/>
</GeometryModel3D.Material>
<GeometryModel3D.Transform>
<Transform3DGroup>
<RotateTransform3D>
<RotateTransform3D.Rotation>
<QuaternionRotation3D
x:Name="qQuaternion"/>
</RotateTransform3D.Rotation>
</RotateTransform3D>
</Transform3DGroup>
</GeometryModel3D.Transform>
</GeometryModel3D>
</Model3DGroup>
</ModelVisual3D.Content>
</ModelVisual3D>
<Viewport3D.Triggers>
<EventTrigger RoutedEvent="Viewport3D.Loaded">
<BeginStoryboard>
<Storyboard>
<QuaternionAnimation
Storyboard.TargetName="qQuaternion"
Storyboard.TargetProperty="Quaternion" From="0,0,1,0" To="0.3, 0.3, 1, 0"
Duration="0:0:7" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>

Trang 56

</Viewport3D.Triggers>
</Viewport3D>
</Window>

Hnh nh ng da vo thuc tnh Rotation ca RotateTransform3D.


2.4.

Php bin i bng ma trn (MatrixTransform3)

Matrix quan i din ng mt vai tr quan trng trong chuyn i v hot ng trn cc i
tng ha, ma trn l mt mng a chiu. Tng 3D bin i kh phc tp, bn c th xy dng
mt bin i vi s kt hp ca cc bin i c bn, bao gm c di chuyn vt th, thay i kch
tht v xoay vt th. Nhng phn sau y m t nhng bin i c bn. Mt khi bn hiu lm
th no s dng cc chuyn i 3D c bn, bn lun c th kt hp chng to ra 3D bin i
tng qut hn.
2.4.1. im v vector 3D
WPF xc nh hai im cu trc 3D, Point3D v Point4D.Point3D xc nh ta X, Y, v Z
ca mt im trong khng gian 3D. Point4D xc nh ta X, Y, Z, v W ca mt im trong
mt 3D ng nht.C cu Vector3D nh ngha cc thnh phn X, Yv Z trong khng gian 3D.
Mt vect trong khng gian 3D c i din bi mt dy hng vi ba yu t X, Y, v Z. V d,
bn c th to mt i tng Vector 3D bng cch s dng on m sau y:
Vector3D v = new Vector3D (1, 2, 3);

Lu rng mt i tng Vector3D v mt i tng Point3D trong WPF l hai i tng


khc nhau cc i tng.
Cch khai bo sau y l khng hp l:
Vector3D v = new Point3D (1, 2, 3);

Tuy nhin, bn c th xc nh mt i tng Vector3D s dng Point3D, hoc ngc li.


Cch khai bo sau y l hp l:
Vector3D v1 = new Point3D (2, 3, 4) - new Point3D (1, 2, 3);
Vector3D v2 = (Vector3D) new Point3D (1, 2, 3);
Point3D pt = (Point3D) new Vector3D (1, 2, 3);

C th chuyn mt i tng Point3D sang mt i tng Point4D, nh sau:


Point4D pt4 = (Point4D) new Point3D (10, 15, 20);
Trang 57

Hoc:
Point4D pt4 = (Point4D) (Point3D) new Vector3D (10, 15, 20);

C i tng Vector3D c th to ra mt i tng Point3D, m sau s to c mt i


tng Point4D. Trong qu trnh c trn, cc i tng Point4D c gi tr: pt4 = (10, 15, 20, 1).
N ch n gin l thm cc thnh phn W c gi tr l 1.
2.4.2. Cu trc ca ma trn 3D
WPF nh ngha mt cu trc ma trn 3D, Matrix3D. l mt ma trn 4x4 trong mi trng
ta ng nht 3D v c c php vector sau y:
M11

M12

M13

M14

M21

M22

M23

M24

M31

M32

M33

M34

OffsetY

OffsetZ

M44

OffsetX

Ct cui cng, M14, M24, M34 u c gi tr bng 0 ,M44 c gi tr bng 1.


Cc gi tr M11, M22, M33 tng ng vi cc gi tr ScaleX, ScaleY, ScaleZ ca i tng
ScaleTransform3D. Cc gi tr OffsetX, OffsetY, OffsetZ tng ng vi cc gi tr ca i tng
TranslateTranfrom3D.
Ta ca mt im bao gm 4 thnh phn (x, y, z, w) thay v ch c (x, y, z). Nu w 0, ta
c th chun ha bng cch chia ta ca im ny cho w c mt ta mi tng ng
(x/w, y/w, z/w, 1), v cc con s x/w, y/w, z/w c gi l ta im trong mi trng ta
ng nht. Nu w = 0, im ny c xem nh nm . Ta im bao gm 4 thnh phn
cng i hi ma trn bin i cng phi c kch thc l 4x4.
Cc yu t ca OffsetX, OffsetY, v OffsetZ nhn v thit lp gi tr ca bin i X, Y, v Z.
Cc thuc tnh no khc lin kt vi Matrix3D cu trc cng hu ch trong vic thc hin cc hot
ng ma trn:
Determinant - Ly yu t quyt nh trong Matrix3D.
HasInverse - Ly mt gi tr cho bit c phi Matrix3D l ma trn nghch o.
Identity - Thay i cu trc Matrix3D.
Trang 58

IsAffine Ly mt gi tr cho bit c phi l cu trc Matrix3D afin.


IsIdentity - Xc nh xem c cu Matrix3D c thay i.
Point3D xc nh cu trc mt i tng Point3D sang mt i tng Point4D, cc thuc
tnh X, Y,v Z s ch sao chp trc tip vo i tng Point4D, v cc thuc tnh W c thit lp
l 1.Cu trc Matrix3D v lp Tranform3D xc nh phng php bin i cc i tng
Point4D v php ma trn nh sau:

|x y z w|

M11

M12

M13

M14

M21

M22

M23

M24
=

M31

M32

M33

M34

OffsetX

OffsetY

OffsetZ

M44

|x y z w|

Vi:
x = M11x + M21y + M31z + OffsetXw
y = M12x + M22y + M32z + OffsetYw
z = M13x + M23y + M33z + OffsetZw
w = M14x + M24y + M34z + M44w

Cu trc Matrix3D nh ngha mt constructor 16 i s cho php bn ch nh tt c cc yu


t ca ma trn bt u vi dng u tin. Cu trc Matrix3D cng nh ngha nhiu phng
php, cho php bn p dng cc loi bin i vo cc ma trn, v bin i im v vect bng
cch s dng ma trn.
Trong XAML, lp Matrix3DConverter c s dng pha sau bn c th thit lp thuc
tnh Matrix ca mt nguyn t MatrixTransform3D s dng mt chui bao gm nhn dng
"identity" hoc thit lp tt c 16 gi tr. V d, bin i sau bng 2 theo hng X v 3 theo hng
Z:
<MatrixTransform3D Matrix="2 0 0 0, 0 1 0 0, 0 0 3 0, 0 0 0 1" />

Lp Transform3D nh ngha mt thuc tnh Value ca loi Matrix3D cung cp cc ma


trn tng ng vi bin i ca i tng.
Trang 59

2.4.3. Bin i ma trn


C cu Matrix3D trong WPF cng cung cp cc phng php xoay, bin i, v dch
chuyn cc ma trn. Di y l mt s phng php thng xuyn nht c s dng cho
Matrix3D hot ng:
Scale - Gn thm bin i Vector3D cho cu trc Matrix3D.
ScaleAt Bin i cc Matrix3D do Vector3D quy nh v cc Point3D.
Translate - Gn thm mt bn dch ca cc hiu s quy nh cho hin ti Matrix3D cu
trc.
Rotate - Gn thm mt bin i xoay cho cc Matrix3D hin hnh.
RotateAt - Xoay cc Matrix3D theo Point3D quy nh.
Invert - o ngc cu trc Matrix3D.
Multiply - Nhn vi cc quy nh c th cc ma trn.
Transform Bin i cc Point3D quy nh, mng ca cc i tng Point3D, Point4D,
mng ca i tng Point4D, Vector3D, hay mng cc i tng Vector3D do Matrix3D.
S dng lp MatrixTransform3D to ra bin i khng sn c t cc lp
RotateTransform3D , TranslateTransform3D , v ScaleTransform3D .

Ta c th nhm nhiu bin i li trong mt Transform3DGroup, nhng l th t ca cc


bin i lm cho mt s khc bit trong kt qu. Tp hp cc bin i tng ng vi php nhn
ma trn, nhng thc t khng phi l php nhn ma trn giao hon.
Hy xem mt v d ca php nhn ma trn. Gi s bn c mt bin i vt th m bin i
theo hng X bng 1.5, theo hng Y bng 2, v theo hng Z bng 2.5. Mt bin i chuyn
dch dc theo trc X bng 10, trc Y bng 20, v trc Z bng 30. y l cch bn c th i din
cho mt bin i kt hp trong XAML vi bin i vt th u tin:
<Transform3DGroup>
<ScaleTransform3D ScaleX="1.5" ScaleY="2" ScaleZ="2.5" />
<TranslateTransform3D OffsetX="10" OffsetY="20" OffsetZ="30" />
</Transform3DGroup>

Trang 60

Cc kt hp chuyn i p dng cho cc im (x, y, z) nh sau:

|x y z 1|

1.5 0

1 0

0 0

0 1

0 0

2.5 0

x 0 0

1 0

= |x y z 1|

10 20 30 1

Ma trn khng nhn giao hon nhng n l kt hp. Bn c th bt u bng cch nhn im
ca ma trn u tin v sau nhn kt qu ca ma trn th hai, hoc bn c th bt u bng
cch nhn hai ma trn vi nhau. y l nhng g bn nhn c trong trng hp :

|x y z 1|

1.5 0

2.5 0

= |x y z 1|

10 20 30 1
Nu ma trn c theo th t ngc li ( dch chuyn trc v sau l bin i), kt qu s
l:

|x y z 1|

1.5 0

2.5 0

= |x y z 1|

15 40 75 1
Khi c dch chuyn u tin, c bn cc yu t dch chuyn cui cng nhn c nhn vi yu
t bin i.
Nu bn nh ngha mt Transform3DGroup c cha nhiu bin i, bn c th mun gi
cc bin i ring bit cho hot ng hoc d liu nhm mc ch rng buc. Nhng cng c th
bn to cc bin i trong mt Transform3DGroup trong mt cch m c ngha vi bn. Bn
c th nhn c mt s hiu qu ci thin bng cch thay th Transform3DGroup vi mt
MatrixTransform3D duy nht.

Bn cn phi thc hin cc php nhn ma trn xc nh ma trn cho MatrixTrans form3D.
Cc lp tru tng Transform3D nh ngha mt thuc tnh Value ca loi Matrix3D, v thuc
Trang 61

tnh ny c tha k tt c cc dn xut ca Transform3D, bao gm Transform3DGroup. Bn c


th truy cp vo thuc tnh ny trc tip trong XAML bng cch t tn cho Transform3DGroup:
<Transform3DGroup x:Name="xform">

Sau , mt ni khc trong file XAML, bn c th tham chiu cc thuc tnh Value ca i
tng vi mt d liu rng buc sau:
<Label Name="lbl" Content="{Binding ElementName=xform, Path=Value}" />

Thuc tnh Content ca Label l loi i tng, v nu i tng t Content khng xut
pht t UIElement, Label ch s dng phng php ToString c c mt chui biu din ca
i tng. Cc phng php ToString ca Transform3D chuyn i Value thnh mt chui
Label hin th 16 s ca ma trn kt hp:
1.5,0,0,0,0,2,0,0,0,0,2.5,0,10,20,30,1
Bn khng th chn vn bn ny v sao chp n, m bn c th nh ngha mt rng buc t
Label cho mt Text Box:
<TextBox Text="{Binding ElementName=lbl, Path=Content}" />

Bn c th khng rng buc TextBox trc tip cho Transform3DGroup v thuc tnh text l
mt chui thc s ch khng phi l mt i tng vi mt phng thc ToString. Nhng vi s
trung gian Label bn c th chn vn bn trong TextBox v nhn Ctrl + C sao chp. Sau bn
c th thay th ton b Transform3DGroup vi mt MatrixTransform3D n v dn vn bn vo
s nh du:
<MatrixTransform3D Matrix="1.5,0,0,0,0,2,0,0,0,0,2.5,0,10,20,30,1" />

Trong code, bn cng c th s dng mt Transform3DGroup nu bn mun gi cc tng bin


i ring bit cho d liu bin i hoc cc mc ch rng buc. Nu bn ch mun to ra mt
bin i kt hp, bn c th s dng cc phng php trong c cu Matrix3D:
Matrix3D matx = new Matrix3D();
matx.Scale(new Vector3D(1.5, 2, 2.5));
matx.Translate(new Vector3D(10, 20, 30));

Sau khi bn hon tt mt bin i trong i tng Matrix3D bn c th t cc i tng


vo thuc tnh Matrix ca MatrixTransform3D.

Trang 62

i vi mi phng php nh bin i v dch chuyn, cu trc Matrix3D cng nh ngha


cc phng php t tn ScalePrepend v TranslatePrepend. Nhng phng php ny thc hin
php nhn xy ra nh l nu chuyn i quy nh l bn tri v nhng bin i hin ti l bn
phi. V d, m sau l tng ng vi on code trc:
Matrix3D matx = new Matrix3D();
matx.Translate(new Vector3D(10, 20, 30));
matx.ScalePrepend(new Vector3D(1.5, 2, 2.5));

Trang 63

Chng 3: T MU CHO HNH 3D


Ni chung th gii ca ha hai chiu v ha ba chiu c lu gi cch xa nhau. Mi
th gii c m hnh ring ca mnh, cc lp ring ca mnh xc nh cc i tng c th nhn
thy, v bin i ring ca mnh.
Trong chng ny chng ta s tm hiu cch s dng c v gradient v tile, trong bao gm
cc hnh nh bitmap, bn v, v thm ch c hnh nh thu c t cc i tng ngi s dng
giao din nh iu khin. Thm ch c th bao gm mt con s 3D bng bt v bt ngun t mt
hnh nh ba chiu.

1. S dng c v Gradient
C php khai bo thuc tnh Brush ca i tng DiffuseMaterial . Khai bo vi mt
mu sc c:
<DiffuseMaterial Brush="Cyan" />

C php ny l mt cch khai bo tt cho:


Brush="{x:Static Brushes.Cyan}"

Bruhes l mt lp trong namespace System.Windows.Media c cha mt tp hp cc

thuc tnh tnh ch c cc loi Brush . (Cc thuc tnh ny thc s tr v i tng ca loi
SolidColorBrush ), mt trong nhng thuc tnh ca loi SolidColorBrush ny Cyan.

Hoc c th s dng c php sau s dng mu RGB:


<DiffuseMaterial Brush="#80FF00C0" />

y cng l c php tt. Mt khai bo r rng hn

cho mt yu t ca loi

SolidColorBrush :
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<SolidColorBrush Color="#80FF00C0"
</DiffuseMaterial.Brush>
</DiffuseMaterial>

V nu bn thc s mun c c khai bo r rng hn v n, cng l mt cch khai bo


tt cho cc c php bao gm mt nguyn t Color:
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<SolidColorBrush>

Trang 64

<SolidColorBrush.Color>
<Color A="128" R="255" G="0" B="192" />
</SolidColorBrush.Color>
</SolidColorBrush>
</DiffuseMaterial.Brush>
</DiffuseMaterial>

C php nh vy c th khai bo tt c cho vic thc hin bi cc lp BrushConverter


v lp ColorConverter khi khai bo trong XAML thuc tnh ca loi Brush v Color.
ch l vi v d chun b sn sng khi chuyn t vic s dng n gin cc
SolidColorBrush

vo

lp

brush

phc

tp

hn.

Cc

thuc

tnh

Brush

ca

DiffuseMaterial l loi Brush , v cc lp Brush tru tng c th c tm thy trong cc

h thng cp bc lp sau y:
Object
DispatcherObject (abstract)
DependencyObject
Freezable (abstract)
Animatable (abstract)
Brush (abstract)
SolidColorBrush (sealed)
GradientBrush (abstract)
LinearGradientBrush (sealed)
RadialGradientBrush (sealed)
TileBrush (abstract)
DrawingBrush (sealed)
ImageBrush (sealed)
VisualBrush (sealed)

Khng c c v c bit cho ha 3D. Thay vo , bn s dng cc c v hai chiu t


cho cc b mt ca ba chiu.
Trong

lp

trnh

thng

thng

WPF

hai

chiu,

bn

th

xc

nh

mt

LinearGradientBrush trang tr nn ca mt Page, v d:


<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<Page.Background>
<LinearGradientBrush StartPoint="0 0" EndPoint="1 1">
<GradientStop Offset="0" Color="Red" />
<GradientStop Offset="0.5" Color="Yellow" />
<GradientStop Offset="1" Color="Blue" />
</LinearGradientBrush>
</Page.Background>
</Page>

Cc thuc tnh StartPoint v EndPoint ch ra nhng im tng i, ni gradient bt


u v kt thc, mt StartPoint ca (0, 0) cho thy gc trn bn tri v mt EndPoint ca (1,
1) cho thy gc di bn phi. (Nhng gi tr ny l mc nh) Cc gi tr Offset ca cc yu t
Trang 65

GradientStop ch ra mt khong cch tng i gia hai im. Kt qu cc gradient bt u

vi mu gc trn bn tri, i vo mu vng trung tm, v kt thc vi mu xanh gc di


bn phi. Nhng c v bao gm ton b Page, do , im v ca (1, 1) tng ng vi gc di
bn phi ca phn t Page.
Thay nn Page vi mt RadialGradientBrush tng t ta c:
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<Page.Background>
<RadialGradientBrush>
<GradientStop Offset="0" Color="Red" />
<GradientStop Offset="0.5" Color="Yellow" />
<GradientStop Offset="1" Color="Blue" />
</RadialGradientBrush>
</Page.Background>
</Page>

Cho d bn ang lm vic vi cc c v trong ha hai chiu hay ha ba chiu, bn c th


tham kho ta trong brush bng cch s dng phi hp h thng sau:

Hnh 1-1: Ta dng xc nh c v.


Theo quy c ca ha hai chiu trong WPF, tng gi tr ca Y i xung. y l i
ngc ca ch xem theo trc Y trong 3D, mt s khc bit l c kh nng gy nhm ln lc
u tin.
t mt vt th ba chiu bng c v hai chiu, bn phi thit lp mt tng ng gia cc
nh ba chiu v mi quan h ca c v trong ta hai chiu. Bn lm iu ny bng cch s
dng mt thuc tnh ca MeshGeometry3D c tn l TextureCoordinates , thuc tnh ny l
ca loi PointCollection n khng phi l mt b su tp Point3Dcollection.

Trang 66

Nh bn bit, mi tam gic trong hnh c xc nh bi ba ch s lin tip trong b su tp


TriangleIndices ca i tng MeshGeometry3D . Nhng ch s ny c khai bo xc

nh v tr ta 3D ca cc nh ca tam gic . Nhng ch s ny cng c khai bo trong b


su tp TextureCoordinates (nu c) c c c v ba chiu trong ta hai chiu. Nu
bn c nh trng lp trong b su tp Position , bn c th kt hp chng vi cc im khc
nhau trong b su tp TextureCoordinates .
Gi s bn xc nh mt LinearGradientBrush nh th ny:
<LinearGradientBrush>
<GradientStop Offset="0" Color="Yellow" />
<GradientStop Offset="1" Color="Brown" />
</LinearGradientBrush>

Mc nh StartPoint v EndPoint l cc gi tr (0, 0) v (1, 1), gradient bt u gc trn


bn tri vi mu vng v kt thc gc di bn phi vi mu nu. Bn c th s dng bt k tp
hp tam gic ca bn c v t mu sc cho mt tam gic trong li 3D. Gi s bn mun lp
bn sau y:

Hnh 1-2: Chuyn i c v tam gic 2 chiu sang tam gic 3 chiu.
Tam gic ba chiu hin th trn bn phi l tham chiu t mt tp hp tam gic ca c v hai
chiu c hin th bn tri. Cc tp con c la chn ca c v c ko di ph hp vi
ton b tam gic 3D. Bn xc nh cc MeshGeometry3D nh sau:
<MeshGeometry3D TriangleIndices="0 1 2"
Positions="0 1 0, -1 0 0, 1 0 0"

Trang 67

TextureCoordinates="0.25 0, 1 1, 0 0.5" />

Brush l mt hnh ch nht hai chiu vi bn nh, v li bao gm cc hnh tam gic vi ba
nh. N ch n gin l khng th xc nh gi tr TextureCoordinates ca mt brush
ton b hnh ch nht ph hp trong mt tam gic duy nht.
Vi TextureCoordinates l thuc tnh c xc nh bi MeshGeometry3D vi ba thuc
tnh na l Position , TriangleIndices , v Normals.
MeshGeometry3D cng tha hng mt thuc tnh Bounds t Geometry3D , thuc tnh ny

l ca loi Rect3D v cho bit tng kch thc ca con s trc khi chuyn i c p dng.
Cc thuc tnh Bounds i khi hu ch cho nh v mt con s. V d, bn c th mun v tr mt
con s di cng ca n nm trn mt phng XZ. Thit lp mt thuc tnh OffsetY ca
TranslateTransform3D n gi tr m ca cc thuc tnh Bounds Y.

Hy ghi nh rng mi GeometryModel3D bao gm mt MeshGeometry3D v mt i tng


ca loi Material , nh vy bng cch cn thit bn s dng c v ging nhau cho tt c cc hnh
tam gic bao gm cc con s. Nu bn mun s dng c v khc nhau cho cc tam gic khc
nhau, bn c th chia hnh thnh nhiu i tng GeometryModel3D . Trong mt s trng hp,
bn c th bao gm mt MeshGeometry3D duy nht vi hai vt liu bng cch xc nh ch s
tam gic theo cch nh vy cho php bn s dng c Material v BackMaterial .
Di y l bn mt kim t thp, gi cho n n gin, kim t thp khng c y.
PyramidWithGradientBrush.xaml
<!-- ===========================================================
PyramidWithGradientBrush.xaml (c) 2007 by Charles Petzold
=========================================================== -->
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
WindowTitle="Pyramid with LinearGradientBrush"
Title="Pyramid with LinearGradientBrush">
<DockPanel>
<ScrollBar Name="horz" DockPanel.Dock="Bottom" Orientation="Horizontal"
Minimum="-180" Maximum="180"
LargeChange="10" SmallChange="1" />
<Viewport3D>
<ModelVisual3D>
<ModelVisual3D.Content>
<Model3DGroup>
<GeometryModel3D>
<GeometryModel3D.Geometry>

Trang 68

<!-- Pyramid: Front, back, left, right. -->


<MeshGeometry3D
Positions="0 1 0, -0.5 0 0.5, 0.5 0 0.5,
0 1 0, 0.5 0 -0.5, -0.5 0 -0.5,
0 1 0, -0.5 0 -0.5, -0.5 0 0.5,
0 1 0, 0.5 0 0.5, 0.5 0 -0.5"
TriangleIndices="0 1 2, 3 4 5,
6 7 8, 9 10 11"
TextureCoordinates="1 0, 0 1, 1 1,
1 0, 0 1, 0 0,
1 0, 0 0, 0 1,
1 0, 1 1, 0 1" />
</GeometryModel3D.Geometry>
<GeometryModel3D.Material>
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<LinearGradientBrush StartPoint="0 0"
EndPoint="1 1">
<GradientStop
Color="#FF0000" Offset="0" />
<GradientStop
Color="#FFFF00" Offset="0.2" />
<GradientStop
Color="#00FF00" Offset="0.4" />
<GradientStop
Color="#00FFFF" Offset="0.6" />
<GradientStop
Color="#0000FF" Offset="0.8" />
<GradientStop
Color="#FF00FF" Offset="1" />
</LinearGradientBrush>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
</GeometryModel3D.Material>
<GeometryModel3D.Transform>
<RotateTransform3D>
<RotateTransform3D.Rotation>
<AxisAngleRotation3D Axis="0 1 0"
Angle="{Binding ElementName=horz, Path=Value}"
/>
</RotateTransform3D.Rotation>
</RotateTransform3D>
</GeometryModel3D.Transform>
</GeometryModel3D>
<!-- Light sources. -->
<AmbientLight Color="Gray" />
<DirectionalLight Color="Gray" Direction="2 -3 -1" />
</Model3DGroup>
</ModelVisual3D.Content>
</ModelVisual3D>
<!-- Camera. -->
<Viewport3D.Camera>
<PerspectiveCamera Position="-2 2 4"
LookDirection="2 -2 -4"
UpDirection="0 1 0"
FieldOfView="22.5" />
</Viewport3D.Camera>
</Viewport3D>
</DockPanel>
</Page>

Trang 69

Gc trn bn phi ca c v l im (1, 0), lun lun nh x ti nh ca kim t thp ti cc


im (0, 1, 0). Ba gc khc ca c v c nh x ti cc nh khc nhau ca kim t thp:

Hnh 1-3: Vt th s dng c v Gradient.


Mt thanh cun ngang cho bn nhn thy rng c v c v lin tc bc quanh kim t thp.

2. S dng c v Tile
Ba lp brush cn li l ImageBrush , DrawingBrush , v VisualBrush . V l thuyt,
nhng c v c kh nhiu chng cho chc nng, nhng trong hu ht cc ng dng thc t c th
bn s s dng chng cho cc mc ch c th:
ImageBrush cho c v da trn bitmap.
DrawingBrush cho c v da trn cc bn v vector.
VisualBrush cho c v da trn cc i tng trc quan, bao gm giao din ngi
s dng cc yu t v iu khin.
ImageBrush ch xc nh mt thuc tnh: thuc tnh ImageSource ca loi ImageSource ,

l lp tru tng t lp BitmapSource v lp DrawingImage . BitmapSource l lp tru


tng ca tt c cc lp bitmap.
DrawingBrush cng ch nh ngha mt thuc tnh: Thuc tnh Drawing , l ca loi
Drawing . Thng thng c th bn s s dng lp GeometryDrawing trong kt hp vi brush

ny, nhng bn cng c th s dng i tng ca loi GlyphRunDrawing , ImageDrawing,


VideoDrawing , v DrawingGroup . c bit, VideoDrawing cho php bn chi mt tp tin

video trn mt i tng 3D.


Trang 70

VisualBrush xc nh hai thuc tnh: Thuc tnh Visual l thuc tnh ca loi Visual

y l lp tru tng ng ch nht l FrameworkElement v Control . (Cc ti sn khc


c t tn l AutoLayoutContent v mc nh l True) Bn s dng VisualBrush a
cc yu t, bng, v kim sot s liu v 3D. y khng phi l chc nng kim sot, nhng ch
c nhng hnh nh ca cc iu khin. VisualBrush hu ch nht trong vic a cc yu t v
TextBlock , v cng c khi s dng cc panels c th cha cc yu t khc.
ImageBrush , DrawingBrush , v VisualBrush tt c bt ngun t TileBrush , nhng

kiu c v ny c kh nng lp li mt hnh nh hnh ch nht theo chiu ngang v theo chiu
dc. Cc hnh vi mc nh, tuy nhin, khng phi l Tile. ImageBrush , DrawingBrush , v
VisualBrush tt c tha k tm thuc tnh t TileBrush v vy TileBrush c s dng mt

cch linh hot v mnh m. Th hin nhng thuc tnh ny s l trng tm chnh ca phn ny.
Brushes da trn file nh.

2.1.

ImageBrush

Hy bt u bng cch s dng ImageBrush t mt hnh nh trn mt khi lp phng,


bitmap c th c p dng cho mt khi lp phng bng nhiu cch khc nhau. Cc mt ca
khi lp phng c xc nh c lp, khng c nh chung. V tr trong b su tp, bn bn
vung gc vi mt phng XZ c nh c xc nh theo th t: upper-left, upper-right,
lower-left, and lower-right . B su tp TextureCoordinates bao gm cc im hai

chiu (0, 0), (1, 0), (0, 1), v (1, 1) tng ng vi th t . TextureCoordinates lp i lp
li nhng im cng bn i tng cho tng mt ca lp phng.
<Window x:Class="PhotoOnACube.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Photo On A Cube" Height="350" Width="525">
<DockPanel>
<ScrollBar Name="horz" DockPanel.Dock="Bottom"
Orientation="Horizontal"
Minimum="-180" Maximum="180"
LargeChange="10" SmallChange="1" />
<ScrollBar Name="vert" DockPanel.Dock="Right" Orientation="Vertical"
Minimum="-180" Maximum="180"
LargeChange="10" SmallChange="1" />
<Viewport3D>

Trang 71

<ModelVisual3D>
<ModelVisual3D.Content>
<Model3DGroup>
<GeometryModel3D>
<GeometryModel3D.Geometry>
<!-- Unit cube: front, back, left,
right, top, bottom. -->
<MeshGeometry3D
Positions="-0.5 0.5 0.5, 0.5 0.5 0.5,
-0.5 -0.5 0.5, 0.5 -0.5 0.5,
0.5 0.5 -0.5, -0.5 0.5 -0.5,
0.5 -0.5 -0.5, -0.5 -0.5 -0.5,
-0.5 0.5 -0.5, -0.5 0.5
-0.5 -0.5 -0.5, -0.5 -0.5
0.5 0.5
0.5 -0.5
-0.5
-0.5

0.5,
0.5,

0.5 -0.5,
0.5 0.5,

0.5,
0.5,

0.5 0.5 -0.5,


0.5 -0.5 -0.5,
0.5
0.5

0.5 -0.5,
0.5 0.5,

0.5 -0.5 -0.5, -0.5 -0.5 -0.5,


0.5 -0.5 0.5, -0.5 -0.5 0.5"
TriangleIndices=" 0
4
8
12
16
20
TextureCoordinates="0
0
0
0
0
0
</GeometryModel3D.Geometry>

2 1, 1 2
6 5, 5 6
10 9, 9 10
14 13, 13 14
18 17, 17 18
22 21, 21 22

3
7,
11,
15
19
23"

0,
0,
0,
0,
0,
0,

1
1
1
1
1
1

1
1
1
1
1
1

0,
0,
0,
0,
0,
0,

0
0
0
0
0
0

1,
1,
1,
1,
1,
1,

1,
1,
1,
1,
1,
1" />

<GeometryModel3D.Material>
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<ImageBrush
ImageSource="hoavabuom.jpg" />
</DiffuseMaterial.Brush>
</DiffuseMaterial>
</GeometryModel3D.Material>
<GeometryModel3D.Transform>
<Transform3DGroup>
<RotateTransform3D>

Trang 72

<RotateTransform3D.Rotation>
<AxisAngleRotation3D Axis="0 1 0"
Angle="{Binding
ElementName=horz,
Path=Value}" />
</RotateTransform3D.Rotation>
</RotateTransform3D>
<RotateTransform3D>
<RotateTransform3D.Rotation>
<AxisAngleRotation3D Axis="1 0 0"
Angle="{Binding
ElementName=vert,
Path=Value}" />
</RotateTransform3D.Rotation>
</RotateTransform3D>
</Transform3DGroup>
</GeometryModel3D.Transform>
</GeometryModel3D>
<!-- Light source. -->
<AmbientLight Color="White" />
</Model3DGroup>
</ModelVisual3D.Content>
</ModelVisual3D>
<!-- Camera. -->
<Viewport3D.Camera>
<PerspectiveCamera Position="-2 2 4"
LookDirection="2 -2 -4"
UpDirection="0 1 0"
FieldOfView="22.5" />
</Viewport3D.Camera>
</Viewport3D>
</DockPanel>
</Window>

Ta s dng AmbientLight, v vy bitmap trng nh ti sng nh khi n c xem bnh


thng trong Windows. Hai thanh cun iu khin trn v di cng bn phi cho bn xoay
khi lp phng xem n t nhiu hng khc nhau.
Cc i tng DiffuseMaterial cho c v c nh ngha nh sau:
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<ImageBrush
ImageSource="hoavabuom.jpg" />
</DiffuseMaterial.Brush>
</DiffuseMaterial>

Trong bitmap c ly t source trong project, y bn c th ly bitmap t mt trang


web no . Kt qu hnh lp phng nh sau:

Trang 73

Hnh 2.1-1: C v s dng ImageBrush.


Theo mc nh, WPF 3D tri di hnh nh ln khi lp phng, hnh vi ny c quy nh bi
cc thuc Stretch m ImageBrush tha hng t TileBrush . Cc thuc tnh mc nh
Stretch l Fill , m tri di hnh nh lp y din tch m khng quan tm n t l ban u

ca n. Nhn chung, cc b mt ca mt i tng 3D th tt c khc nhau v hnh dng v kch


c, do ko di hnh nh ph hp chc chn l hnh vi tng qut n gin nht. i vi mt
s ng dng bn s mun c gng bo v t l chnh xc ca bitmap.
Bn c th mun th nghim vi cc la chn thay th, v d:
<ImageBrush Stretch="Uniform" />

By gi hnh nh cc gi nh t l chnh xc ca n trn mt ca lp phng. Nhng do kch


tht ca khi lp phng ln hn kch tht ca hnh, nn n s to ra nhng khong trng.
Thay v vy bn c th s dng cch sau:
<ImageBrush Stretch="UniformToFill" />

Vi ty chn Uniform v UniformToFill , hnh nh xut hin t l chnh xc v n hin


th trn mt b mt vung. Nu iu ny khng thc s l mt khi lp phng, hnh nh s c
thu nh hoc ct nh th n l hin th trn mt b mt vung, nhng n s khng xut hin c
t l chnh xc. Thit lp thuc tnh Stretch khng c mt ty chn trong th gii hai chiu
bi v n cho php hnh nh thay i kch thc. i vi con s 3D, bn cn phi xc nh
TextureCoordinates trong khi thit lp ty chn.

Trang 74

Bn c th s dng cc b su tp TextureCoordinates ct hnh nh. Hy th n. Thay


th dng u tin ca TextureCoordinates vi nhng thng s sau y:
0.3 0.1, 0.8 0.1, 0.3 0.6, 0.8 0.6,
iu ny c ngha rng ti mun phi hp tng i (0.3 0.1) ca brush c lin kt vi
gc trn bn tri mt pha trc ca khi lp phng. Cc ta tng i khc ca bn c v
c thit lp ch hin th mt na chiu rng v mt na chiu cao ca bitmap. V mt trc
ca khi lp phng hin nay s hin th mt phin bn c o ct ca hnh nh:

Hnh 2.1-2: Hnh nh sau khi c thay i gi tr TextureCoordinates.


Sau bn c th thay th cc dng cn li trong TextureCoordinates c hnh nh
nh bn mong mun.
Nu bn cn phi ct hnh nh, bn c th s dng cc thuc tnh Viewbox c xc nh bi
TileBrush . t Viewbox trong mt i tng ca loi Rect (mt hnh ch nht hai chiu) cho

thy cc phn mong mun ca hnh nh lin quan n ranh gii. Hnh ch nht ny bao gm
bn thng s: phi hp tri, phi hp trn cng, chiu rng, v chiu cao. c c th hin
trong hnh nh trc , ta dng:
<ImageBrush Viewbox="0.3 0.1 0.5 0.5" />

Trang 75

Hnh 2.1-3: Hnh nh khi s dng ViewboxUnit.


Hoc bn c th s dng ViewboxUnits vi trng Absolute :
<ImageBrush ViewboxUnits="Absolute" Viewbox="132 52 220 260"

Ngoi ra cn c mt thuc tnh na l TileMode mc nh ca thuc tnh ny l


TileMode.None . Bn c th thit lp thuc tnh Tile cho php ko gin, nhng khng

phi l kh y bi v theo mc nh kch thc ca mi c gi nh l kch thc ca c


v. Bn cng cn phi s dng thuc tnh Viewport cho bit kch thc ca mi tile tng
i so vi hp ranh gii. Ging nh Viewbox , bn thit lp khung nhn cho mt i tng Rect.
V d:
<ImageBrush TileMode="Tile" Viewport="0 0 0.20 0.25"

iu ny c ngha l Viewport theo chiu ngang m bn mun mi chim 20 phn trm


ca chiu rng, v theo chiu dc bn mun mi c 25 phn trm ca chiu cao. Nm s
xut hin theo chiu ngang v bn theo chiu dc theo tng b mt, v l trng hp:

Trang 76

Hnh 2.1-4: Hnh nh sau khi c s dung thm thuc tnh TileMode.
V bn c th thay i phn trm ca tng da vo Viewport . V d nh Viewport="0 0
0.40 0.67" . Hoc cho hnh nh i xng vi nhau qua trc x v trc y bng cch s dng
TileMode="FlipXY":

Hnh 2.1-5: Hnh nh khi s dng thuc tnh TileMode vi kiu FlipXY.
2.2.

DrawingBrush

Trong XAML, bn c th cung cp cc thuc tnh gn lin cng vi cc thuc tnh khc l
DrawingBrush hoc VisualBrush :
<DrawingBrush RenderOptions.CachingHint="Cache"

Lp RenderOptions nh ngha hai thuc tnh khc c lin quan m bn c th s dng


trong

cng

mt

cch:

CacheInvalidationThresholdMinimum

CacheInvalidationThresholdMaximum . Bn t nhng gi tr m ch ra mt s thay i


Trang 77

trong kch thc cho php trc khi c v c s dng li. V d, nu bn t


CacheInvalidationThresholdMinimum n 0.25, c v s c s dng cho n khi kch

thc ca n l mt phn t kch thc ban u ca n. Tng t nh vy, bn thit lp gi tr


CacheInvalidationThresholdMaximum vi gi tr ln hn mt.

C v da trn Drawing :
DrawingBrush rt ging vi ImageBrush v tha hng tt c thuc tnh t TileBrush .

Bn thng s dng DrawingBrush to ra mt c v da trn ha v cc i tng bng


vector, bao gm cc ng thng, ng cong Bezier, ch nht, bu dc, v vng cung.
DrawingBrush nh ngha mt ti sn trn c tn l Drawing ca loi Drawing . Drawing

l mt lp tru tng ca GeometryDrawing , ImageDrawing , GlyphRunDrawing , VideoDrawing , v DrawingGroup (cho kt hp v cc i tng).

Thng thng bn s s dng mt hoc nhiu i tng GeometryDrawing trong kt ni vi


mt DrawingBrush , nu bn c nhiu hn mt, bn c th kt hp chng trong mt
DrawingGroup . Tuy nhin, bn cng c th kt hp cc bn v v hnh nh bitmap bng cch s

dng lp ImageDrawing , lp ny nh ngha mt ti sn c tn ImageSource bn thit lp


mt bitmap.
y l c php chung khi bn thit lp ch c mt i tng GeometryDrawing:
<DrawingBrush >
<DrawingBrush.Drawing>
<GeometryDrawing >

</GeometryDrawing>
</DrawingBrush.Drawing>
</DrawingBrush>

Cc lp GeometryDrawing nh ngha cc thuc tnh Brush, Pen, v Geometry . Nu bn


v km theo bao gm mt s vng m bn mun lm y vi mt c v, y l ni bn xc nh
mt c v. Nu bn ch cn mt SolidColorBrush , bn c th ch nh mu sc trong th
GeometryDrawing :
<GeometryDrawing Brush="Magenta">

Nu bn mun ng thng c v bi mt Pen, th Pen phi c quy nh nh mt yu t


s hu:
Trang 78

<GeometryDrawing>

<GeometryDrawing.Pen>
<Pen Brush="Black" Thickness="2.5" />
</GeometryDrawing.Pen>

</GeometryDrawing>

Nu bn v ca bn i hi nhiu mu sc bt v hoc mu sc lp y, mi s kt hp mu
sc khc nhau phi c mt i tng GeometryDrawing ring bit. Bn c th nhm nhiu i
tng GeometryDrawing trong mt DrawingGroup .
Cc ng thng thc t xc nh cc bn v c quy nh nh i tng Geometry .
Geometry l mt lp tru tng l lp cha ca cc lp LineGeometry , RectangleGeometry,
EllipseGeometry ,

PathGeometry ,

StreamGeometry ,

CombinedGeometry ,

GeometryGroup . Bn c th s dng GeometryGroup kt hp cc i tng trong mt


GeometryDrawing duy nht:
<GeometryDrawing>

<GeometryDrawing.Geometry>
<GeometryGroup>
<EllipseGeometry />
<LineGeometry />
<LineGeometry />
</GeometryGroup>
</GeometryDrawing.Geometry>

</GeometryDrawing>

Chng ta cp n hai loi nhm. DrawingGroup thng kt hp nhiu i tng


GeometryDrawing , mi trong s c thuc tnh Brush, Pen, v Geometry ring.
GeometruGroup kt hp nhiu i tng hnh hc.

Bn cng c th thit lp thuc tnh Geometry ca GeometryDrawing mt chui m ha


ng thng v ng cong:
<GeometryDrawing Geometry="M 0 0 L 100 50 ">

CubesWithDrawingBrushes.xaml
<Window x:Class="CubesWithDrawingBrushes.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<!-- MeshGeometry3D of unit cube. -->
<MeshGeometry3D x:Key="cube"

Trang 79

Positions="-0.5
-0.5
0.5
0.5
-0.5
-0.5
0.5
0.5
-0.5
-0.5
0.5
0.5
TriangleIndices="

0.5 0.5, 0.5 0.5 0.5,


-0.5 0.5, 0.5 -0.5 0.5,
0.5 -0.5, -0.5 0.5 -0.5,
-0.5 -0.5, -0.5 -0.5 -0.5,
0.5 -0.5, -0.5 0.5 0.5,
-0.5 -0.5, -0.5 -0.5 0.5,
0.5 0.5, 0.5 0.5 -0.5,
-0.5 0.5, 0.5 -0.5 -0.5,
0.5 -0.5, 0.5 0.5 -0.5,
0.5 0.5, 0.5 0.5 0.5,
-0.5 -0.5, -0.5 -0.5 -0.5,
-0.5 0.5, -0.5 -0.5 0.5"
0 2 1, 1 2 3
4 6 5, 5 6 7,
8 10 9, 9 10 11,
12 14 13, 13 14 15
16 18 17, 17 18 19
20 22 21, 21 22 23"
TextureCoordinates="0 0, 1 0, 0 1, 1 1,
0 0, 1 0, 0 1, 1 1,
0 0, 1 0, 0 1, 1 1,
0 0, 1 0, 0 1, 1 1,
0 0, 1 0, 0 1, 1 1,
0 0, 1 0, 0 1, 1 1" />
<!-- DrawingBrush with ellipse. -->
<DiffuseMaterial x:Key="ellipse">
<DiffuseMaterial.Brush>
<DrawingBrush RenderOptions.CachingHint="Cache"
TileMode="Tile" Viewport="0 0 0.2 0.2">
<DrawingBrush.Drawing>
<GeometryDrawing Brush="Cyan">
<GeometryDrawing.Pen>
<Pen Brush="Red"></Pen>
</GeometryDrawing.Pen>
<GeometryDrawing.Geometry>
<EllipseGeometry RadiusX="4" RadiusY="4"/>
</GeometryDrawing.Geometry>
</GeometryDrawing>
</DrawingBrush.Drawing>
</DrawingBrush>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
<!--DrawingBrush with brick-->
<DiffuseMaterial x:Key="bricks">
<DiffuseMaterial.Brush>
<DrawingBrush RenderOptions.CachingHint="Cache"
TileMode="Tile" Viewport="0 0 0.1 0.1">
<DrawingBrush.Drawing>
<DrawingGroup>
<GeometryDrawing Brush="LightGray">
<GeometryDrawing.Geometry>
<RectangleGeometry Rect="0 0 20 20"/>

Trang 80

</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing Brush="Brown">
<GeometryDrawing.Geometry>
<GeometryGroup>
<RectangleGeometry Rect="0 1 9 8"/>
<RectangleGeometry Rect="11 1 9 8"/>
<RectangleGeometry Rect="1 11 18 8"/>
</GeometryGroup>
</GeometryDrawing.Geometry>
</GeometryDrawing>
</DrawingGroup>
</DrawingBrush.Drawing>
</DrawingBrush>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
<!-- DrawingBrush with diagonal hatch marks. -->
<DiffuseMaterial x:Key="hatch">
<DiffuseMaterial.Brush>
<DrawingBrush RenderOptions.CachingHint="Cache"
TileMode="Tile" Viewport="0 0 0.2 0.2"
Viewbox="0 0 100 100"
ViewboxUnits="Absolute">
<DrawingBrush.Drawing>
<DrawingGroup>
<GeometryDrawing Brush="White"
Geometry="M 0 0 L 100 0 L 100 100 L 0 100 Z" />
<GeometryDrawing Geometry="M -10 77.5 L 22.5 110
M -10 52.5 L 47.5 110
M -10 27.5 L 72.5 110
M -10 2.5 L 97.5 110
M 2.5 -10 L 110 97.5
M 27.5 -10 L 110 72.5
M 52.5 -10 L 110 47.5
M 77.5 -10 L 110 22.5">
<GeometryDrawing.Pen>
<Pen Brush="Black" Thickness="4" />
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingGroup>
</DrawingBrush.Drawing>
</DrawingBrush>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
</Window.Resources>
<DockPanel>
<ScrollBar Name="horz" DockPanel.Dock="Bottom"
Orientation="Horizontal"
Minimum="-180" Maximum="180"
LargeChange="10" SmallChange="1" />

Trang 81

<ScrollBar Name="vert" DockPanel.Dock="Right" Orientation="Vertical"


Minimum="-180" Maximum="180"
LargeChange="10" SmallChange="1" />
<Viewport3D>
<ModelVisual3D>
<ModelVisual3D.Content>
<Model3DGroup>
<!-- Cube with ellipse brush. -->
<GeometryModel3D Geometry="{StaticResource cube}"
Material="{StaticResource ellipse}"
BackMaterial="{StaticResource ellipse}">
<GeometryModel3D.Transform>
<TranslateTransform3D OffsetX="-1.5"
OffsetY="1.5" />
</GeometryModel3D.Transform>
</GeometryModel3D>
<!-- Cube with bricks brush. -->
<GeometryModel3D Geometry="{StaticResource cube}"
Material="{StaticResource bricks}" />
<!-- Cube with hatch brush. -->
<GeometryModel3D Geometry="{StaticResource cube}"
Material="{StaticResource hatch}">
<GeometryModel3D.Transform>
<TranslateTransform3D OffsetX="1.5"
OffsetY="-1.5" />
</GeometryModel3D.Transform>
</GeometryModel3D>
</Model3DGroup>
</ModelVisual3D.Content>
<!-- Rotation transforms bound to scrollbars. -->
<ModelVisual3D.Transform>
<Transform3DGroup>
<RotateTransform3D>
<RotateTransform3D.Rotation>
<AxisAngleRotation3D Axis="0 1 0"
Angle="{Binding ElementName=horz,
Path=Value}" />
</RotateTransform3D.Rotation>
</RotateTransform3D>
<RotateTransform3D>
<RotateTransform3D.Rotation>
<AxisAngleRotation3D Axis="1 0 0"
Angle="{Binding ElementName=vert,
Path=Value}" />
</RotateTransform3D.Rotation>
</RotateTransform3D>
</Transform3DGroup>
</ModelVisual3D.Transform>
</ModelVisual3D>

Trang 82

<!-- Light source. -->


<ModelVisual3D>
<ModelVisual3D.Content>
<AmbientLight Color="White" />
</ModelVisual3D.Content>
</ModelVisual3D>
<!-- Camera. -->
<Viewport3D.Camera>
<PerspectiveCamera Position="0 0 10"
LookDirection="0 0 -10"
UpDirection="0 1 0"
FieldOfView="30" />
</Viewport3D.Camera>
</Viewport3D>
</DockPanel>
</Window>

DrawingBrush u tin l resource c tn l "ellipse". Cc bao gm mt ellipse vi mt

ng vin mu v mt brush mu cyan. Cc gc xung quanh ellipse th trong sut, v vy ti


s dng cng mt brush cho c c ti sn BackMaterial ca GeometryModel3D . Bn c th
thy qua cc gc ca mi ging bn trong cc khi lp phng:

Hnh 2.2-1: S dng DrawingBrush t theo kiu hnh ellipse ly t resource.


B rng bn ngoi ca ellipse c so snh vi kch thc tng th ca n. y l kt qu ca
vic c mt bn knh bn n v v mc nh chiu rng bt v mt n v. C chiu rng v
chiu cao ca bt v c ln l 9.
DrawingBrush th hai m phng nhng gch:

Trang 83

Hnh 2.2-2: S dng DrawingBrush t theo kiu hnh ch nht ly t resource.


Mi bng mt phn mi chiu rng v chiu cao ca mt bn khi lp phng, brush ny
bao gm mt nn nh sng mu xm (va) vi ba hnh ch nht mu nu, hai phn gch trn u
mi v y pha di. Ch rng cc hnh ch nht cho nh sng nn mu xm c cho
kch thc ca 20 n v, trong c hiu qu xc nh kch thc ca brush.
Cc DrawingBrush th ba l trong l thuyt n gin v c bn nht, nhng rc ri nht. N
c m phng nh du cho c sn trong Windows:

Hnh 2.2-3: S dng DrawingBrush t theo kiu sc cho ly t windowns.


Nn trng c nh ngha nh l mt hnh vung vi mt ca 100 n v. c xc nh:
<GeometryDrawing Geometry="M

0 75 L 25 100
M 0 50 L 50 100
M 0 25 L 75 100
M 0 0 L 100 100
M 25 0 L 100 75

Trang 84

M 50
M 75

0 L 100
0 L 100

50
25">

iu ny ch ra ng thng c v t (0, 75) n (25, 100),...


2.3.

VisualBrush

ImageBrush , DrawingBrush , v VisualBrush c s chng cho trong chc nng: Bn c

th thit lp thuc tnh ImageSource ca ImageBrush cho mt i tng ca DrawingImage,


m l da trn mt i tng Drawing . Tng t nh vy, bn c th thit lp thuc tnh
Drawing ca DrawingBrush cho mt i tng ca ImageDrawing , m chnh n c mt thuc

tnh ImageSource m bn c th thit lp mt bitmap.


VisualBrush v cn c vo cc yu t Image ( hin th bitmap) hoc lp con ca lp
Shapes ( hin th bn v vector).
VisualBrush hu ch nht cho mt vi ng dng m khng th c x l vi ImageBrush

hoc DrawingBrush . p dng c v vo mt chui vn bn mt cch d dng nu bn thit lp


thuc tnh Visual ca VisualBrush n mt i tng ca loi TextBlock . Nu bn cn
nhiu dng ca vn bn trong brush vi cc phng ch v mu sc khc nhau, bn c th kt hp
nhiu yu t TextBlock , hoc cc yu t ca bt k, cc yu t Panel c sn, chng hn nh
StackPanel , Grid , v Canvas . Lp Panel c ngun gc t FrameworkElement , n cng l

mt i tng ca loi Visual .


y l mt DiffuseMaterial da trn mt VisualBrush c nh ngha l mt ti
nguyn v s dng cho c cc thuc tnh Material v BackMaterial ca i tng
GeometryModel3D .
Hello3D.xaml
<!-- ==========================================
Hello3D.xaml (c) 2007 by Charles Petzold
========================================== -->
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
WindowTitle="Hello 3D"
Title="Hello 3D">
<Page.Resources>
<!-- Define Material object as resource. -->
<DiffuseMaterial x:Key="materialText">
<DiffuseMaterial.Brush>
<VisualBrush RenderOptions.CachingHint="Cache">
<VisualBrush.Visual>
<TextBlock FontFamily="Times New Roman"
Text="Hello, 3D!" />

Trang 85

</VisualBrush.Visual>
</VisualBrush>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
</Page.Resources>
<Viewport3D>
<ModelVisual3D>
<ModelVisual3D.Content>
<GeometryModel3D Material="{StaticResource materialText}"
BackMaterial="{StaticResource
materialText}">
<!-- Define a unit square. -->
<GeometryModel3D.Geometry>
<MeshGeometry3D
Positions="0 0 0, 0 1 0, 1 0 0, 1 1 0"
TriangleIndices="0 2 3, 0 3 1"
TextureCoordinates="0 1, 0 0, 1 1, 1 0" />
</GeometryModel3D.Geometry>
<!-- Transform applied to visual object. -->
<GeometryModel3D.Transform>
<RotateTransform3D>
<RotateTransform3D.Rotation>
<AxisAngleRotation3D
x:Name="xform"
Axis="0,1,0" />
</RotateTransform3D.Rotation>
</RotateTransform3D>
</GeometryModel3D.Transform>
</GeometryModel3D>
</ModelVisual3D.Content>
</ModelVisual3D>
<!-- Ambient light. -->
<ModelVisual3D>
<ModelVisual3D.Content>
<AmbientLight Color="White" />
</ModelVisual3D.Content>
</ModelVisual3D>
<!-- Camera. -->
<Viewport3D.Camera>
<PerspectiveCamera Position="0 0.5 1.5" LookDirection="0 0 -1"
UpDirection="0 1 0" FieldOfView="120" />
</Viewport3D.Camera>
</Viewport3D>
<!-- Animate the transform. -->
<Page.Triggers>
<EventTrigger RoutedEvent="Page.Loaded">
<BeginStoryboard>
<Storyboard TargetName="xform" TargetProperty="Angle">
<DoubleAnimation From="360" To="0" Duration="0:0:10"
RepeatBehavior="Forever" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Page.Triggers>
</Page>

Trang 86

Gi s bn mun hin th mt khi lp phng vi su mu sc khc nhau trn su bn ca n.


Bn c th lm iu ny bng cch chia tch cc khi lp phng ln thnh su i tng khc
nhau GeometryModel3D , mi mt i tng ring bit Material v mu sc khc nhau. Ngoi
ra, bn c th s dng mt GeometryModel3D v to ra mt DrawingBrush vi su i tng
Drawing khc nhau cho su bn khc nhau. Sau , bn tham chiu cc phn khc nhau m
Drawing s dng trong cc b su tp TextureCoordinates .

Chng trnh sau y l tng t nh cch tip cn th hai v khc l n s dng mt bng
UniformGrid cha su hng. Mi ct trong s cc hng c cha mt i tng Rectangle

bng c v fill khc nhau. Hu ht cc tp tin l tng t nh PhotoOnACube1.xaml.


PaneledCube.xaml
<!-- ==============================================
PaneledCube.xaml (c) 2007 by Charles Petzold
============================================== -->

<GeometryModel3D.Geometry>
<!-- Unit cube. -->
<MeshGeometry3D
Positions="-0.5 0.5 0.5, 0.5 0.5 0.5,
-0.5 -0.5 0.5, 0.5 -0.5 0.5,
0.5 0.5 -0.5, -0.5 0.5 -0.5,
0.5 -0.5 -0.5, -0.5 -0.5 -0.5,
-0.5 0.5 -0.5, -0.5 0.5 0.5,
-0.5 -0.5 -0.5, -0.5 -0.5 0.5,
0.5 0.5 0.5, 0.5 0.5 -0.5,
0.5 -0.5 0.5, 0.5 -0.5 -0.5,
-0.5 0.5 -0.5, 0.5 0.5 -0.5,
-0.5 0.5 0.5, 0.5 0.5 0.5,
0.5 -0.5 -0.5, -0.5 -0.5 -0.5,
0.5 -0.5 0.5, -0.5 -0.5 0.5"
TriangleIndices=" 0 2 1, 1 2 3
4 6 5, 5 6 7,
8 10 9, 9 10 11,
12 14 13, 13 14 15
16 18 17, 17 18 19
20 22 21, 21 22 23"
TextureCoordinates=
"0.000 0, 0.167 0, 0.000 1, 0.167 1,
0.167 0, 0.333 0, 0.167 1, 0.333 1,
0.333 0, 0.500 0, 0.333 1, 0.500 1,
0.500 0, 0.667 0, 0.500 1, 0.667 1,
0.667 0, 0.833 0, 0.667 1, 0.833 1,
0.833 0, 1.000 0, 0.833 1, 1.000 1" />
</GeometryModel3D.Geometry>

Trang 87

<GeometryModel3D.Material>
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<VisualBrush
RenderOptions.CachingHint="Cache">
<VisualBrush.Visual>
<UniformGrid Rows="1" Columns="6">
<Rectangle Width="10" Height="10" Fill="#FF0000"
<Rectangle Width="10" Height="10" Fill="#FFFF00"
<Rectangle Width="10" Height="10" Fill="#00FF00"
<Rectangle Width="10" Height="10" Fill="#00FFFF"
<Rectangle Width="10" Height="10" Fill="#0000FF"
<Rectangle Width="10" Height="10" Fill="#FF00FF"
</UniformGrid>
</VisualBrush.Visual>
</VisualBrush>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
</GeometryModel3D.Material>

/>
/>
/>
/>
/>
/>

Mt loi khc c ngun gc t Visual l Viewport3D , c ngha l bn c th to mt c v


da trn mt vt th 3D.
l tin ng sau cc chng trnh sau y. Mt MeshGeometry3D v mt
Viewport3D hon chnh c khai bo trong resouce. Mt tham chiu ca Viewport3D t

ngun MeshGeometry3D hin th mt khi lp phng.


3DCubeBrush.xaml
<!-- ==============================================
3DCubeBrush.xaml (c) 2007 by Charles Petzold
============================================== -->
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
WindowTitle="3D Cube Brush"
Title="3D Cube Brush">
<Page.Resources>
<!-- Unit cube. -->
<MeshGeometry3D x:Key="cube"
Positions="-0.5 0.5 0.5, 0.5 0.5 0.5,
-0.5 -0.5 0.5, 0.5 -0.5 0.5,
0.5 0.5 -0.5, -0.5 0.5 -0.5,
0.5 -0.5 -0.5, -0.5 -0.5 -0.5,
-0.5 0.5 -0.5, -0.5 0.5 0.5,
-0.5 -0.5 -0.5, -0.5 -0.5 0.5,
0.5 0.5 0.5, 0.5 0.5 -0.5,
0.5 -0.5 0.5, 0.5 -0.5 -0.5,
-0.5 0.5 -0.5, 0.5 0.5 -0.5,
-0.5 0.5 0.5, 0.5 0.5 0.5,
0.5 -0.5 -0.5, -0.5 -0.5 -0.5,
0.5 -0.5 0.5, -0.5 -0.5 0.5"
TriangleIndices=" 0 2 1, 1 2 3

Trang 88

4 6 5, 5 6 7,
8 10 9, 9 10 11,
12 14 13, 13 14 15
16 18 17, 17 18 19
20 22 21, 21 22 23"
TextureCoordinates="0 0, 1 0, 0 1, 1 1,
0 0, 1 0, 0 1, 1 1,
0 0, 1 0, 0 1, 1 1,
0 0, 1 0, 0 1, 1 1,
0 0, 1 0, 0 1, 1 1,
0 0, 1 0, 0 1, 1 1" />
<!-- Viewport3D to be used in VisualBrush. -->
<Viewport3D x:Key="viewport3D" Width="100" Height="100">
<ModelVisual3D>
<ModelVisual3D.Content>
<Model3DGroup>
<GeometryModel3D Geometry="{StaticResource cube}" >
<GeometryModel3D.Material>
<DiffuseMaterial Brush="Cyan" />
</GeometryModel3D.Material>
</GeometryModel3D>
<!-- Light sources. -->
<AmbientLight Color="#404040" />
<DirectionalLight Color="#C0C0C0" Direction="2 -3 -1" />
</Model3DGroup>
</ModelVisual3D.Content>
</ModelVisual3D>
<!-- Camera. -->
<Viewport3D.Camera>
<PerspectiveCamera Position="-2 2 4"
LookDirection="2 -2 -4"
UpDirection="0 1 0"
FieldOfView="22.5" />
</Viewport3D.Camera>
</Viewport3D>
</Page.Resources>
<DockPanel>
<ScrollBar Name="horz" DockPanel.Dock="Bottom" Orientation="Horizontal"
Minimum="-180" Maximum="180"
LargeChange="10" SmallChange="1" />
<ScrollBar Name="vert" DockPanel.Dock="Right" Orientation="Vertical"
Minimum="-180" Maximum="180"
LargeChange="10" SmallChange="1" />
<Viewport3D>
<ModelVisual3D>
<ModelVisual3D.Content>
<Model3DGroup>
<GeometryModel3D Geometry="{StaticResource cube}">
<GeometryModel3D.Material>
<DiffuseMaterial>
<DiffuseMaterial.Brush>

Trang 89

<VisualBrush TileMode="Tile" Viewport="0 0 0.2 0.2"


RenderOptions.CachingHint= "Cache" Visual= "{StaticResource viewport3D}" />
</DiffuseMaterial.Brush>
</DiffuseMaterial>
</GeometryModel3D.Material>
<GeometryModel3D.Transform>
<Transform3DGroup>
<RotateTransform3D>
<RotateTransform3D.Rotation>
<AxisAngleRotation3D Axis="0 1 0" Angle="{Binding
ElementName=horz, Path=Value}" />
</RotateTransform3D.Rotation>
</RotateTransform3D>
<RotateTransform3D>
<RotateTransform3D.Rotation>
<AxisAngleRotation3D Axis="1 0 0"
Angle="{Binding ElementName=vert,
Path=Value}" />
</RotateTransform3D.Rotation>
</RotateTransform3D>
</Transform3DGroup>
</GeometryModel3D.Transform>
</GeometryModel3D>
<!-- Light source. -->
<AmbientLight Color="White" />
<DirectionalLight Color="Gray" Direction="2 -3 -1" />
</Model3DGroup>
</ModelVisual3D.Content>
</ModelVisual3D>
<!-- Camera. -->
<Viewport3D.Camera>
<PerspectiveCamera Position="-2 2 4" LookDirection="2 -2 -4"
UpDirection="0 1 0" FieldOfView="22.5" />
</Viewport3D.Camera>
</Viewport3D>
</DockPanel>
</Page>

S khc bit y l i tng Material l da trn mt VisualBrush bng cch tham


chiu n ti nguyn Viewport3D , v vy m khi lp phng dng nh c t bi mt hnh
khi 3D thu nh:

Trang 90

Hnh 2.3-1: Khi lp phng c t bng nhng khi lp phng nh.


Mi c v bao gm cc mt ca khi lp phng, cc khi chc chn trng ging nh n c
xy dng t 25 khi nh mi bn.
Cc tn min trong namespace System.Windows.Media.Media3D nh ngha mt lp
Viewport3DVisual k tha trc tip t Visual . y l mt lp c s dng ch yu trong

WPF thu hp khong cch gia WPF 3D v hnh nh hai chiu. Nhng bn cng c th s
dng n khi xc nh mt VisualBrush . Trong 3DCubeBrush.xaml, thay i ti nguyn
Viewport3D bng mt ngun ti nguyn Viewport3DVisual bng cch thay th cc thuc tnh
Width v Height vi mt thuc tnh Viewport :
<Viewport3DVisual x:Key="viewport3D" Viewport="0 0 100 100">

Trang 91

Chng 4: NG DNG
1. Gii thiu
Sau khi tm hiu v ha 3D trong Windows Presentation Foudation, em t o mt demo s
dng cc php bin i v cc php xoay c bn vo demo ny. Chng trnh cho php c th
bin i tnh hoc bin i ng.

2. Phn tch
Mc ch chnh ca ng dng to nn nhng bin i, cho php ngi s dng c th thay i
cc thng s nhm to ra cc bin i ty chn hoc c th thc hin cc bin i ng.
Cc yu cu ca ng dng:
+ Cc textbox thay i v hin th cc thng s cho php bin i ma trn.
+ Cc textbox thay i v hin th cc thng ca php xoay theo trc v gc.
+ Cc textbox thay i v hin th cc thng s cho php xoay bng php ton
Quaternion.
+ Cc textbox thay i v hin th cc thng s cho php dch chuyn theo cc
trc.
+ Cc textbox thay i v hin th cc thng s bin i kch thc theo cc trc.
+ Cc button thc hin cc bin i ng: Animation, Xoay, Dch chuyn.

Trang 92

3. Giao din ng dng

Hnh 3: Giao din chnh.


Cc thnh phn ca ng dng:
STT

Tn

Kiu control

ngha

lbThongSoMaTran

Label

Tiu tn loi bin i ma trn

txtM11

Texbox

Hin th thng s M11 ca ma trn

txtM12

Textbox

Hin th thng s M12 ca ma trn

txtM13

Textbox

Hin th thng s M13 ca ma trn

txtM14

Textbox

Hin th thng s M14 ca ma trn

txtM21

Textbox

Hin th thng s M21 ca ma trn

txtM22

Textbox

Hin th thng s M22 ca ma trn

txtM23

Textbox

Hin th thng s M23 ca ma trn

txtM24

Textbox

Hin th thng s M24 ca ma trn

txtM31

Textbox

Hin th thng s M31 ca ma trn

10

txtM32

Textbox

Hin th thng s M32 ca ma trn

Trang 93

11

txtM33

Textbox

Hin th thng s M33 ca ma trn

12

txtM34

Textbox

Hin th thng s M34 ca ma trn

13

txtOffsectX

Textbox

Hin th thng s OffsectZ ca ma trn

14

txtOffsectY

Textbox

Hin th thng s OffsectY ca ma trn

15

txtOffsectZ

Textbox

Hin th thng s OffsectZ ca ma trn

16

txtM44

Textbox

Hin th thng s M44 ca ma trn

17

cmdCapNhatMaTrix

Button

Cp nht li gi tr ca ma trn

18

lbThongSoXoayTrucGoc

Label

Tiu loi xoay theo trc v gc

19

lbVector3DX

Label

Tiu tn gi tr ca trc X

20

lbVector3DY

Label

Tiu tn gi tr ca trc Y

21

lbVector3DZ

Label

Tiu tn gi tr ca trc Z

22

lbAngle

Label

Tiu tn gi tr ca gc xoay

23

txtVector3DX

Textbox

Hin th gi trc trn trc X

24

txtVector3DY

Textbox

Hin th gi trc trn trc Y

25

txtVector3DZ

Textbox

Hin th gi trc trn trc Z

26

txtAngle

Textbox

Hin th gi trc gc xoay

27

cmdCapNhatRotation

Button

Cp nht li cc thng s ca php xoay


trc v gc

28

lbThongSoXoayQuaternion

Lable

Tiu tn loi Php xoay bng php


ton Quaternion

28

LbQuaternionW

Label

Tiu tn loi gi tr gc xoay

30

LbQuaternionX

Label

Tiu tn loi gi tr trc X

31

LbQuaternionY

Label

Tiu tn loi gi tr trc Y

32

LbQuaternionZ

Label

Tiu tn loi gi tr trc Z

33

txtQuaternionW

Textbox

Hin th gi tr ca gc xoay

34

txtQuaternionX

Textbox

Hin th gi tr ca trc X

35

txtQuaternionY

Textbox

Hin th gi tr ca trc Y

36

txtQuaternionZ

Textbox

Hin th gi tr ca trc Z

Trang 94

37

cmdCapNhatQuaternio n

Button

Cp nht li cc thng s ca php xoay


bng php ton Quaternion

38

LbThongSoDichChuyen

Lable

Tiu tn loi php dch chuyn

39

LbOffsectX

Label

Tiu tn loi gi tr Offsect trn trc


X

40

LbOffsectY

Label

Tiu tn loi gi tr Offsect trn trc


Y

41

LbOffsectZ

Label

Tiu tn loi gi tr Offsect trn trc


Z

42

txtOffsectX

Textbox

Tiu tn loi gi tr Offsect trn trc


X

42

txtOffsectY

Textbox

Tiu tn loi gi tr Offsect trn trc


Y

44

txtOffsectZ

Textbox

Tiu tn loi gi tr Offsect trn trc


Y

45

cmdCapNhatCacOffsect

Button

Cp nht li cc thng s ca php dch


chuyn

46

lbThongSoBienDoiKichThuoc Lable

Tiu tn loi php bin i kch thc

47

lbScaleX

Tiu tn php bin i kch thc

Label

trn trc X
48

lbScaleY

Label

Tiu tn php bin i kch thc


trn trc Y

49

lbScaleZ

Label

Tiu tn php bin i kch thc


trn trc Z

50

txtScaleX

Textbox

Hin th gi tr bin i kch thc trn


trc X

51

txtScaleY

Textbox

Hin th gi tr bin i kch thc trn


trc Y

Trang 95

52

txtScaleZ

Textbox

Hin th gi tr bin i kch thc trn


trc Z

53

cmdCapNhatCacScale

Button

Cp nht li cc thng s ca php bin


i kch thc

54

cmdAnimation

Button

Thc hin php to hnh nh ng

55

cmdXoay

Button

Thc hin php xoay theo cc trc X, Y,


Z v gc

56

cmdDichChuyen

Button

Thc hin php dch chuyn theo trc X

57

cmdReset

Button

Hin th hnh li hnh nh ban u

58

lbHienThi

Label

Hin th cc gi tr khi nhn vo cc nt


bin i: Animation, Xoay, Dch chuyn

59

cameraX

ScrollBar

Xoay camera theo trc X t -360 n


360

60

cameraY

ScrollBar

Xoay camera theo trc Y t -360 n


360

61

cameraZ

ScrollBar

Xoay camera theo trc Z t -360 n


360

62

direclightX

ScrollBar

Xoay nh sng theo trc X t -360 n


360

63

direclightY

ScrollBar

Xoay nh sng theo trc Y t -360 n


360

64

direclightZ

ScrollBar

Xoay nh sng theo trc Z t -360 n


360

65

cmdThoat

Button

Thot khi chng trnh

Bng 4: Bng m t cc thnh phn ca giao din.

Trang 96

4. Cc dng s kin chnh


Khi nhn vo nt Cp nht li ma trn chng trnh s ly gi tr nhp vo t ma trn
chuyn i sang gi tr cc php xoay. Sau cho hin th cc gi tr ln cc textbox
ca cc thng s ca php xoay trc v gc v cc textbox ca php xoay bng php ton
Quaternion. V cho bin i theo thng s va cp nht.
Khi nhn vo nt Cp nht li Trc/Gc chng trnh s ly gi tr nhp vo t cc
textbox ca php xoay trc v gc chuyn i sang gi tr cc php xoay quaternion v
cc thng s ca ma trn. Sau cho hin th cc gi tr ln cc textbox ca cc thng
php xoay bng php ton Quaternion v textbox cho thng s ca ma trn. V cho bin
i theo thng s va cp nht.
Khi nhn vo nt Cp nht li gi tr chng trnh s ly gi tr nhp vo t cc textbox
ca php xoay trc v gc chuyn i sang gi tr cc php xoay trc v gc v cc thng
s ca ma trn. Sau cho hin th cc gi tr ln cc textbox c a cc thng php xoay
trc v gc v textbox cho thng s ca ma trn. V cho bin i theo thng s va cp
nht.
Khi nhn vo nt Cp nht li thng s chng trnh s dch chuyn theo thng s va
cp nht.
Khi nhn vo nt Cp nht li t l chng trnh s bin i theo t l va cp nht.
Khi nhn vo nt Animation chng trnh s cho hnh nh ng thuc tnh
FieldOfViewProperty Camera t -90 n 90 .
Khi nhn vo nt Xoay, chng trnh s xoay t (1, 1, 0) n (0.3, 0.3, 0) v gc t 180 n 180 .
Khi nhn vo nt Dch chuyn, chng trnh s cho hnh nh dch chuyn theo trc X
vi gi tr t -2 n 2.
Khi nhn vo nt Reset, hnh nh hin th tr v nh lc ban u.
Khi nhn vo nt Thot th chng trnh s ng li.

Trang 97

KT LUN
1. V mt l thuyt
Em tm hiu c cc vn sau:
c im v im mnh ca cng ngh WPF v mt s vn cn thit lm quen
vi cng ngh mi.
Cch thc to mt hnh nh ba chiu.
Tm hiu cn bn hu ht cc i tng ha ba chiu.

2. V mt ng dng
Hon thnh mt s yu cu c bn sau:
To c cc hnh 3D.
S dng hu ht cc bin i, hot nh.
S dng c v.

3. Hng pht trin


i su vo tm hiu thut ton hnh hc mesh v cch s dng bin i bng ma
trn v php ton quaternion.
To cc hnh vng xuyn, cc hnh a gic.

Trang 98

TI LIU THAM KHO


Ti liu ting anh:
1. Anna Hsu UniCAD Practical WPF Graphics Programming Nov 2007 Jack Xu, Ph.D 2007.
2. Charles Petzold 3D Programming for Windows Presentation Foundation, December
2006 - June 2007.
Website
1. http://msdn.microsoft.com/en-us/library/aa663364.aspx
2. http://CodePlex.com/Wiki/View.aspx?ProjectName=3DTools

Trang 99

Anda mungkin juga menyukai