MSSV: 3.07.01.488
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.
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.
T vit tt
WPF
XAML
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
Trang 3
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.
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
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
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
MeshGeometry3D
Light
Material
Camera
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)
Trang 13
Trang 14
namespace
System.Windows.Media.Media3D .
Hai
lp
tn
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
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:
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));
Point3DCollection
Freezable
Point3DCollection
Int32Collection
Trang 17
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 .
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
Trang 19
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:
hai
ta
thay
th
PerspectiveCamera
bng
OrthographicCamera .
n mt thit lp mc nh l 2.
OrthographicCamera nh ngha mt mt phng chiu, mt phng chiu vung gc vi
Trang 22
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:
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
Hot ng
DirectionLight
PointLight
SpotLight
AmbientLight
DirectionalLight
PointLight
phng nhiu gc :
<PointLight Color=White Position=2,2,2
ConstantAttenuation=0
LinearAttenuation=0
QuadraticAttenuation=0.125/>
SpotLight
Trang 26
AmbientLight
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:
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
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:
Trang 30
<DiffuseMaterial Brush="Cyan"/>
</ GeometryModel3D.Material>
<GeometryModel3D.BackMaterial>
<DiffuseMaterial Brush="Red"/>
</ GeometryModel3D.BackMaterial>
</ GeometryModel3D>
Trang 31
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,
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
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
Trang 34
Hnh
nh
ng
ko
di
20
Vector3DAnimationUsingKeyFrames
giy
ng
khng
vi
lp
thuc
li.
tnh
Cc
Direction
tng
ca
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
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 .
Camera.
Model3D.
ModelVisual3D .
Camera l lp tru tng cho tt c cc lp camera, bao gm c PerspectiveCamera v
OrthographicCamera .
Trang 36
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
Tn thuc tnh
TranlateTransform3D
Di chuyn v tr ca mt vt th
ScaleTransform3D
RotateTrasform3D
MatrixTransform3D
Trang 37
2.1.
yu t GeometryModel3D.
<GeometryModel3D>
<GeometryModel3D.Transform>
<TranslateTransform3D OffsetX="2" OffsetY="0" OffsetZ=" -1" /;>
</GeometryModel3D.Transform>
</GeometryModel3D>
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)
Trang 39
-->
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
Trang 41
<TranslateTransform3D
OffsetX="{Binding ElementName=xMod, Path=Value}"
OffsetY="{Binding ElementName=yMod, Path=Value}"
OffsetZ="{Binding ElementName=zMod, Path=Value}" />
</Transform3DGroup>
</GeometryModel3D.Transform>
<GeometryModel3D.Transform>
Trang 42
Trang 43
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
t,
nu
cc
thuc
tnh
CenterX ,
CenterY ,
CenterZ
ca
mt
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" />
Hoc:
<TranslateTransform3D OffsetX="CX/SZ-CX" OffsetY="CY/SY-CY" OffsetZ="CZ/SZ-CZ" />
<ScaleTransform3D ScaleX="SX" ScaleY="SY" ScaleZ="SZ" />
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
RotateTransform3D .Rotation
kha
bn
ch
nh
mt
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 :
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>
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">
thuc
hiu lc
trn mt
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
tan() =
Trang 53
ta
xc
nh
cu
trc
ca
mt
quaternion.
Trong
namespace
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);
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>
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);
Hoc:
Point4D pt4 = (Point4D) (Point3D) new Vector3D (10, 15, 20);
M12
M13
M14
M21
M22
M23
M24
M31
M32
M33
M34
OffsetY
OffsetZ
M44
OffsetX
|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
Trang 60
|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
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" />
Trang 62
Trang 63
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" />
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.
cho mt yu t ca loi
SolidColorBrush :
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<SolidColorBrush Color="#80FF00C0"
</DiffuseMaterial.Brush>
</DiffuseMaterial>
Trang 64
<SolidColorBrush.Color>
<Color A="128" R="255" G="0" B="192" />
</SolidColorBrush.Color>
</SolidColorBrush>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
vo
lp
brush
phc
tp
hn.
Cc
thuc
tnh
Brush
ca
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)
lp
trnh
thng
thng
WPF
hai
chiu,
bn
th
xc
nh
mt
Trang 66
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
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.
Trang 68
Trang 69
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 ,
VisualBrush xc nh hai thuc tnh: Thuc tnh Visual l thuc tnh ca loi Visual
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
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,
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>
Trang 73
Trang 74
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
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"
cng
mt
cch:
CacheInvalidationThresholdMinimum
C v da trn Drawing :
DrawingBrush rt ging vi ImageBrush v tha hng tt c thuc tnh t TileBrush .
</GeometryDrawing>
</DrawingBrush.Drawing>
</DrawingBrush>
<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 ,
<GeometryDrawing.Geometry>
<GeometryGroup>
<EllipseGeometry />
<LineGeometry />
<LineGeometry />
</GeometryGroup>
</GeometryDrawing.Geometry>
</GeometryDrawing>
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="
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
Trang 82
Trang 83
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">
VisualBrush
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
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
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>
/>
/>
/>
/>
/>
/>
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
Trang 90
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
Tn
Kiu control
ngha
lbThongSoMaTran
Label
txtM11
Texbox
txtM12
Textbox
txtM13
Textbox
txtM14
Textbox
txtM21
Textbox
txtM22
Textbox
txtM23
Textbox
txtM24
Textbox
txtM31
Textbox
10
txtM32
Textbox
Trang 93
11
txtM33
Textbox
12
txtM34
Textbox
13
txtOffsectX
Textbox
14
txtOffsectY
Textbox
15
txtOffsectZ
Textbox
16
txtM44
Textbox
17
cmdCapNhatMaTrix
Button
Cp nht li gi tr ca ma trn
18
lbThongSoXoayTrucGoc
Label
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
24
txtVector3DY
Textbox
25
txtVector3DZ
Textbox
26
txtAngle
Textbox
27
cmdCapNhatRotation
Button
28
lbThongSoXoayQuaternion
Lable
28
LbQuaternionW
Label
30
LbQuaternionX
Label
31
LbQuaternionY
Label
32
LbQuaternionZ
Label
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
38
LbThongSoDichChuyen
Lable
39
LbOffsectX
Label
40
LbOffsectY
Label
41
LbOffsectZ
Label
42
txtOffsectX
Textbox
42
txtOffsectY
Textbox
44
txtOffsectZ
Textbox
45
cmdCapNhatCacOffsect
Button
46
lbThongSoBienDoiKichThuoc Lable
47
lbScaleX
Label
trn trc X
48
lbScaleY
Label
49
lbScaleZ
Label
50
txtScaleX
Textbox
51
txtScaleY
Textbox
Trang 95
52
txtScaleZ
Textbox
53
cmdCapNhatCacScale
Button
54
cmdAnimation
Button
55
cmdXoay
Button
56
cmdDichChuyen
Button
57
cmdReset
Button
58
lbHienThi
Label
59
cameraX
ScrollBar
60
cameraY
ScrollBar
61
cameraZ
ScrollBar
62
direclightX
ScrollBar
63
direclightY
ScrollBar
64
direclightZ
ScrollBar
65
cmdThoat
Button
Trang 96
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.
Trang 98
Trang 99