Với những ứng dụng thương mại, chẳng hạn một ứng dụng bán hàng trực tuyến, việc cung cấp một giao diện người dùng mạnh có thể tạo nên sự khác biệt giữa một công ty với các đối thủ cạnh t
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG CAO ĐẲNG CÔNG NGHỆ THÔNG TIN TP.HCM
KHOA CÔNG NGHỆ THÔNG TIN
KHÓA LUẬN TỐT NGHIỆP
TÌM HIỂU LẬP TRÌNH ĐỒ HỌA 3D TRONG WINDOWS PRESENTATION FOUNDATION
Giảng viên hướng dẫn: ThS.TRẦN MINH THÁI
Sinh viên thực hiện:
TRẦN THỊ DÂN MSSV: 3.07.01.488 Ngành: Công nghệ phần mềm
Khóa 2007 – 2010
Tp Hồ Chí Minh, tháng 07 năm 2010
Trang 2MỞ ĐẦU
Ngày nay, công nghệ thông tin phát triển mạnh mẽ, trong các ứng dụng hiện đại, giao diện người dùng trực quan chiếm vị trí hết sức quan trọng Việc trình diễn đúng thông tin, theo đúng cách và vào đúng thời điểm có thể đem lại những giá trị kinh tế xã hội đáng kể Với những ứng dụng thương mại, chẳng hạn một ứng dụng bán hàng trực tuyến, việc cung cấp một giao diện người dùng mạnh có thể tạo nên sự khác biệt giữa một công ty với các đối thủ cạnh tranh, góp phần làm tăng tăng doanh số và giá trị thương hiệu của hãng này so với hãng khác
Để có được một giao diện người dùng như vậy, việc tích hợp đồ họa, media, văn bản và các thành phần trực quan khác như một thể thống nhất đóng đóng vai trò mấu chốt và WPF đã làm được điều này
Điểm nổi bật nhất của WPF là hiển thị hình ảnh bằng đồ họa 3D, WPF giúp cho những ai đam mê đồ họa 3D mà không thể tiếp cận nó trên công cụ phức tạp OpenGL hay DirectX WPF tích hợp sẵn DirectX giúp người lập trình phát triển ứng dụng 3D một cách dễ dàng mà khôn phải quan tâm đến sự phức tạp của DirectX
WPF là sản phẩm của Microsoft, một tổ chức nghiên cứu đông đảo và đội ngũ kỹ thuật cao, WPF đang dần lang rộng khắp thế giới và trong tương lai không xa WPF sẽ trở thành một trong những công nghệ phổ biến nhất trong thế giới lập trình ứng dụng Xuất phát từ các lý do trên em nghiên cứu về công nghệ WPF này nhằm cung cấp cho mọi người một sự hiểu biết nhất định về công nghệ sẽ phát triển trong một tương lai không xa Rất mong sự đóng góp ý kiến của quý thầy cô để em có thêm kinh nghiệm cũng như những ý tưởng hay trong công nghệ mà mình nghiên cứu
Trang 3LỜI CẢM ƠN
Lời đầu tiên em xin bày tỏ lòng biết ơn chân thành nhất đến quý Thầy Cô trong Khoa Công Nghệ Thông Tin, trường Cao Đẳng Công Nghệ Thông Tin Tp.Hô Chí Minh đã tận tình giảng dạy, hướng dẫn, giúp đỡ và tạo điều kiện cho em trong suốt thời gian học tập tại trường
Em xin chân thành cảm ơn thầy Trần Minh Thái – Người đã tận tình hướng dẫn, giúp đỡ
em trong suốt thời gian thực hiện luận văn này
Và con xin chân thành cảm ơn gia đình đã luôn động viên, ủng hộ vật chất lẫn tin thần trong suốt thời gian qua
Em xin cảm ơn sự quan tâm, giúp đỡ và ủng hộ của anh chị, bạn bè trong quá trình thực hiện khóa luận
Cuối cùng, em xin chúc quý Thầy Cô trường Cao đẳng công nghệ thông tin Tp.HCM, Thầy Trần Minh Thái, lời chúc sức khỏe và luôn gặt hái được nhiều thành công trong cuộc sống
Tp.Hồ Chí Minh, tháng 07 năm 2010
Trang 4NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
Ngày … tháng … năm 2010 Ký tên
Trang 5NHẬN XÉT CỦA GIÁO VIÊN PHẢN B IỆN
Ngày … tháng … năm 2010 Ký tên
Trang 6MỤC LỤC
MỞ ĐẦU 1
PHẦN I: TỔNG QUAN 4
VỀ WINDOWS PRESENTATION FOUNDATION 4
1 Giới thiệu 4
2 Sự ra đời của Windows Presentation Foundation(WPF) 4
3 Ứng dụng của WPF 6
4 Ưu điểm nổi bật của WPF 8
5 Bộ thư viện của WPF 10
PHẦN II: GIỚI THIỆU VỀ 3D 11
CHƯƠNG 1: GIỚI THIỆU GÓC NHÌN, ÁNH SÁNG VÀ MÔ TẢ KHÔNG GIAN TỌA ĐỘ 14
1 Tổng quan 14
1.1 Tọa độ ba chiều 15
1.2 Điểm trong không gian 16
2 Góc nhìn (Camera) 18
3 Ánh sáng (Light) 24
3.1 DirectionalLight 25
3.2 PointLight 26
3.3 SpotLight 26
3.4 AmbientLight 27
4 Mô tả không gian tọa độ 27
1 Hình ảnh động 32
2 Phép biến đổi hình 36
2.1 Phép dịch chuyển (TranslateTranform3D) 38
2.2 Phép biến đổi kích thước (ScaleTransform3D) 42
Trang 72.3 Phép xoay (RotateTransform3D) 45
2.4 Phép biến đổi bằng ma trận (MatrixTransform3) 57
CHƯƠNG 3: TÔ MÀU CHO HÌNH 3D 64
1 Sử dụng cọ vẽ Gradient 64
2 Sử dụng cọ vẽ Tile 70
2.1 ImageBrush 71
2.2 DrawingBrush 77
2.3 VisualBrush 85
CHƯƠNG 4: ỨNG DỤNG 92
1 Giới thiệu 92
2 Phân tích 92
3 Giao diện ứng dụng 93
4 Các dòng sự kiện chính 97
KẾT LUẬN 98
TÀI LIỆU THAM KHẢO 99
Trang 8DANH MỤC CÁC HÌNH, BẢNG BIỂU VÀ SƠ ĐỒ
Hình 1: Hình hộp có sử dụng Light .13
Hình 2: Hình hộp không sử dụng Light .13
Hình 1-1: Hình tròn .14
Hình 1-2: Hình quả bóng .14
Hình 1.1-1: Hệ trục tọa độ .15
Hình 2-1: Camera với góc nhìn 50mm 19
Hình 2-2: Camera với góc nhìn 100mm 19
Hình 2-3: Camera với góc nhìn 25mm 20
Hình 2-4: Camera với góc nhìn 45 độ .20
Hình 2-5: Hình hộp sử dụng PerspectiveCamera 22
Hình 2-6:Cách xác định OrthographicAerialView .23
Hình 2-7: Hình hộp sử dụng OrthographicCamera .24
Hình 3.1-1: Hình minh họa sử dụng DirectionalLight .25
Hình 3.2-1: Hình minh họa sử dụng PoinLight 26
Hình 3.3-1: Hình minh họa sử dụng SpotLight 27
Hình 3.4-1: Hình minh họa sử dụng AmbientLight .27
Hình 4-1: Hình ảnh tam giác trên mặt phẳng .28
Hình 4-2: Cách xác định các đỉnh dựa trên hệ trục tọa độ Oxyz .29
Hình 4-3: Mặt trước của hình vuôngHình 4-4: Mặt sau của hình vuông 30
Bảng 3: Các thuộc tính biến đổi .37
Hình 2.1-1: Cách tham chiếu trên hệ trục tọa độ để vẽ một vật thể .38
Hình 2.1-2: Hình ảnh được vẽ bằng cách nói các đoạn thẳng 39
Hình 2.3.1-1: Vật thể được xoay với một góc 30 độ .47
Hình 2.3.1-2: Vật thể được xoay với một góc -30 độ 47
Hình 2.3.2-1: Các điểm x, y trên hệ trục tọa độ Oxy .52
Hình 2.3.2-2: Góc và đường thẳng của điểm x,y trên hệ trục Oxy 52
Trang 9Hình 2.3.2-3: Cách khác để xác định 2 điểm x,y .53
Hình 2.3.2-4: Số phức trên hệ trục tọ a độ số phức .53
Hình 2.3.2-5: Số phức với góc θ .54
Hình 1-1: Tọa độ dùng xác định cọ vẽ .66
Hình 1-2: Chuyển đổi cọ vẽ tam giác 2 chiều sang tam giác 3 chiều .67
Hình 1-3: Vật thể sử dụng cọ vẽ Gradient .70
Hình 2.1-1: Cọ vẽ sử dụng ImageBrush 74
Hình 2.1-2: Hình ảnh sau khi được thay đổi giá trị TextureCoordinates 75
Hình 2.1-3: Hình ảnh khi sử dụng ViewboxUnit .76
Hình 2.1-4: Hình ảnh sau khi có sử dung thêm thuộc tính TileMode .77
Hình 2.1-5: Hình ảnh khi sử dụng thuộc tính TileMode với kiểu FlipXY .77
Hình 2.2-1: Sử dụng DrawingBrush tô theo kiểu hình ellipse lấy từ resource .83
Hình 2.2-2: Sử dụng DrawingBrush tô theo kiểu hình chữ nhật lấy từ resource 84
Hình 2.2-3: Sử dụng DrawingBrush tô theo kiểu sọc chéo lấy từ windowns .84
Hình 2.3-1: Khối lập phương được tô bằng những khối lập phương nhỏ .91
Hình 3: Giao diện chính .93
Bảng 1: Thành phần giao diện theo yêu c ầu và những công nghệ chuyên biệt cần thiết để tạo chúng 10
Bảng 2: Các thuộc tính c ủa Light 25
Bảng 3: Các thuộc tính biến đổi 37
Bảng 4: Bảng mô tả các thành phần của giao diện 96
Sơ đồ 1: Cấu trúc đơn giản để tạo ra hình hộp 3D 11
Sơ đồ 2: Lớp con trong lớp Media 17
Đồ họa ba chiều trong Windows Presentation Foundation WPF 3D
Bảng: Danh sách các từ viết tắt.
Trang 10MỞ ĐẦU
Công nghệ Windows Presentation Foundation
Khi khoảng cách công nghệ giữa các nhà sản xuất không còn quá xa, khi tính năng giữa các phần mềm không còn nhiều khác biệt thì là lúc giao diện nổi lên như là một trong những giá trị cạnh tranh cho mỗi sản phẩm phần mềm Dù đó là web hay là phần mềm ứng dụng thì một giao diện hấp dẫn, thân thiện luôn là điểm nhấn cho mỗi sản phẩm đó Windows Presentation Foundation (WPF) là một trong những công nghệ mới với những ưu điểm nổi bật cho việc thiết kế
và lập trình giao diện
Với công nghệ từ trước năm 2006, thì việc biểu diễn hiệu quả tất cả các tính năng hoạt động như một ứng dụng Window riêng biệt chạy trên desktop, đồng thời có thể truy cập thông tin thông qua trình duyệt đòi hỏi xây dựng hai phiên bản độc lập sử dụng hai công nghệ khác nhau Và việc
hợp nhất giữa người thiết kế và người lập trình cũng gặp không ít những khó khăn Windows
Presentation Foundation ra đời không những giải quyết được các vấn đề trên mà còn có những ưu điểm về đồ họa, âm thanh, video… Với việc sử dụng ngôn ngữ XAML(Extention MakeUp
Language) giúp cho việc quản lý các tập tin dễ dàng hơn
Đặc biệt, điểm nổi bật nhất của WPF là đồ họa ba chiều Khó khăn nhất cho những lập trình viên khi lập trình với DirectX đó chính là card đồ họa mà nhà cung cấp hỗ trợ DirectX Và giờ đây WPF có khả năng thực thi những công việc dựa trên những tính toán phần mềm thay vì những đặc điểm mà nhà cung cấp phần cứng tạo ra WPF sẽ xác đính sự hỗ trợ của phần cứng với những hiệu ứng đồ họa được tạo ra Và bạn không cần phải bận tâm về điều đó
Lịch sử ra đời và tương lai của WPF
Lịch sử ra đời
WPF là một trong những công nghệ mới nhất trong NET 2008 (Framework 3.0 hay 3.5) của Microsoft,là hệ thống API mới hỗ trợ việc xây dựng giao diện đồ hoạ trên nền Windows WPF được giới thiệu lần đầu tiên cùng với NET 3.0 vào ngày 21 tháng 11 năm 2006 Và phát hình phiên bản chính thức đầu tiên vào ngày 30 tháng 4 năm 2007
Trang 11Tiếp sau đó là WPF 2.0, WPF 3.0 được phát hành vào ngày 22 tháng 7 năm 2009, và vừa mới đây là WPF 4.0(với gói Framework 4.0) được phát hành vào ngày 7 tháng 6 năm 2010
Tương lai của WPF
Việc Microsoft chính thức ra mắt bộ công cụ Visual Studio 2010 và nền tảng phát triển NET 4.0 và WPF 4.0 Sự kiện này đã và đang mở ra hướng mới trong ngành công nghiệp phần mềm, với sự linh hoạt và khả năng xây dựng ứng dụng một cách nhanh chóng mà vẫn đáp ứng được những yêu cầu ngày các khắt khe của người dùng
Lý do chọn đề tài
WPF được xem là thế hệ kế tiếp của Windowns, tăng cường khả năng lập trình giao diện của lập trình viên bằng cách cung cấp API cho phép tận dụng những lợi thế về đa phương tiện hiện đại, các công nghệ sẵn có khác nhau và lợi thế của card đồ họa Đặc biệt sử dụng DirectX làm công nghệ cơ sở để xây dựng nên những hiệu ứng - DirectX là công nghệ đồ họa của Microsoft, tận dụng được khả năng của phần cứng để tăng tốc chương trình
Là sản phẩm của Microsoft ( tìm lực tài chính mạnh mẽ, với 95% máy tính cá nhân sử dụng hệ điều hành windows, đội ngũ kỹ thuật hàng đầu và sự thành công của các sản phẩm trong quá khứ) nên đủ để bạn tin vào khả năng WPF sẽ trở thành một trong những công nghệ phổ biến nhất trong thế giới lập trình ứng dụng
Trên cơ sở đó em quyết định tìm hiểu công nghệ WPF và đi sâu vào nghiên cứu đồ họa 3D với việc phát triển một ứng dụng mà sử dụng hầu hết các ứng dụng về đồ họa 3 chiều mà WPF đã hỗ trợ
để cung cấp cho mọi người một sự hiểu biết nhất định về đồ họa 3D với một công nghệ WPF mà được dự đoán là sẽ phát triển trong một tương lai không xa
Trang 13cả Windows Server 2003 Nó cung cấp kiểu lập trình cho việc xây dựng ứng dụng và hổ trợ
1 cách trong suốt giữa giao diện người dùng và mô hình ứng dụng doanh nghiệp Một ứng dụng WPF có thể được triển khai trên desktop hoặc trên 1 thiết bị thông qua trình duyệt web Hơn thế nữa, nó còn hổ trợ các nhiều control, thiết kế và phát triển giao diện thân thiện, trực quan bên ngoài của chương trình windows Nó hướng đến sự hợp nhất của 1 ứng dụng dịch vụ: giao diện người dùng, đồ họa 2D và 3D, các văn bản cố định và động, các mô hình đồ họa nâng cao, đồ họa vector, hình ảnh động, Data Binding, Audio và Video Mặc dù Windows Form sẽ tiếp tục được sử dụng rộng rãi, nhưng các công ty phát triển ứng dụng WPF như là các ứng dụng doanh nghiệp (line-of-bussiness)
Microsoft Sliverlight là một nền tảng web của WPF hoặt động như một dạng Flash và các ứng dụng mobiles với các mô hình chương trình tương tự như là 1 ứng dụng NET Tính năng 3D không được hổ trợ, tuy nhiên XPS và cơ sở đồ họa vector đã được tích hợp
2 Sự ra đời của Windows Presentation Foundation(WPF)
Windows Presentation Foundation được phát hành chính thức vào tháng 11 năm 2006
Vì sao WPF lại ra đời?
Đi đến tương lai bằng cái nhìn từ quá khứ, năm 2001, Microsoft cho ra đời một tập hợp các công nghệ nền tảng, được gọi với tên chung là NET Hầu hết các công nghệ này đều đưa ra các
mô hình lập trình mới, hoàn toàn chưa từng xuất hiện trước đó Lấy ví dụ:
Trang 141 ASP.NET Web Forms đưa mô hình lập trình Windows truyền thống lên thế giới Web, biến Web từ môi trường state-less (client và server tách biệt hoàn toàn) thành một môi trường thống nhất: state-full Web
2 ADO.NET định nghĩa ra các class tổng quát như Connection, Command, DataSet để các developer thừa kế từ chúng, mở rộng khả năng tiếp cận với nhiều loại RDMS (Relational Database Management System) khác nhau như SQL Server, Access, Oracle, MySql…, đồng thời nâng cao khả năng debug khi thao tác với database
3 Common Language Runtime làm thư viện nền tảng giúp lập trình viên sử dụng nhiều ngôn ngữ lập trình khác nhau có thể cùng làm việc với nhau trong một project Có thể kể ra C#, J#, F#, VB.NET, Delphi.NET, C++.NET, IronRuby, IronPython…
Tuy nhiên công nghệ mà những nhà phát triển trung thành nhất của Microsoft mong muốn nhìn thấy bước đột phá – Windows Forms – lại chẳng có gì thay đổi Đã hơn một thập kỷ, kể từ khi Windows 95 ra đời, người ta vẫn phải tạo giao diện cho ứng dụng desktop bằng cách gọi các hàm Windows API Windows Forms tuy khoác bên ngoài giao diện kéo thả nhưng thực chất bên dưới nó vẫn bị phụ thuộc vào các lời gọi API, nên nó không có gì là đặc sắc
Trải qua một thời gian tồn tại dài như thế, Windows Forms đã được chuẩn hóa và mang trong mình đầy đủ các công cụ cho phép xây dựng các chương trình dễ dàng Tuy nhiên, do sử dụng Windows API, nên giao diện của các control chuẩn như button, checkbox, textbox bị phụ thuộc vào phiên bản Windows mà NET Framework đang chạy, ví dụ 3D button trong Vista Aero khi đem sang Windows 2000 thì lại biến thành flat button Nhưng đó chỉ là vấn đề nhỏ, rắc rối lớn nhất của Windows Forms chính là giao diện của các control chuẩn này lại gần như không thể được can thiệp và thay đổi theo tư duy sáng tạo của nhà thiết kế, ngoại trừ trường hợp có ai đó chịu khó đến nỗi ngồi viết cả tấn code bằng mô hình lập trình cấp thấp GDI/GDI+ (Graphical Device Interface)
Trong các ứng dụng hiện đại, giao diện người dùng trực quan chiếm vị trí hết sức quan trọng Việc trình diễn đúng thông tin, theo đúng cách và vào đúng thời điểm có thể đem lại những giá trị kinh tế xã hội đáng kể Với những ứng dụng thương mại, chẳng hạn một ứng dụng bán hàng trực tuyến, việc cung cấp một giao diện người dùng mạnh có thể tạo nên sự khác biệt giữa một công ty với các đối thủ cạnh tranh, góp phần làm tăng doanh số và giá trị thương hiệu của hãng này so với
Trang 15hãng khác Để có được một giao diện người dùng như vậy, việc tích hợp đồ họa, media, văn bản
và các thành phần trực quan khác như một thể thống nhất đóng đóng vai trò mấu chốt
WPF ra đời chính là để xây dựng một nền tảng chung giải quyết những thách thức đã nêu trên
3 Ứng dụng của WPF
WPF được xây dựng nhằm vào ba mục tiêu cơ bản:
1) Cung cấp một nền tảng thống nhất để xây dựng giao diện người dùng
2) Cho phép người lập trình và người thiết kế giao diện làm việc cùng nhau một cách
1 Sử dụng đối tượng Transformation để xoay tròn, kéo dãn, thu nhỏ hay xoay nghiêng bất cứ thứ gì thuộc về giao diện
2 Tạo hình ảnh động (Animation) để các control trở lên lung linh chuyển động ngay trước mắt người sử dụng
3 Xây dựng Form có các hình thù khác lạ, hỗ trợ control có màu trong suốt để tạo vẻ mới mẻ
và chuyên nghiệp
Trang 16WPF sử dụng DirectX làm công nghệ cơ sở để xây dựng nên những hiệu ứng thú vị như trên DirectX là công nghệ đồ họa của Microsoft, tận dụng được khả năng của phần cứng để tăng tốc chương trình Lấy ví dụ, một vấn đề đơn giản là vẽ một đoạn thẳng từ điểm (0, 0) đến điểm (10, 10)
· Trong GDI/GDI+ của Windows Forms, NET sẽ tạo ra một danh sách các điểm nằm giữa (0, 0) và (10, 10), tức là các điểm (1, 1), (2, 2), … , (9, 9) rồi vẽ ra từng điểm này Do vẽ nhiều điểm
kề nhau nên cuối cùng các điểm này tạo ra cảm giác là vẽ được một đoạn thẳng Nói một cách khác, phương pháp của Windows Forms là sử dụng phần mềm để vẽ ra một tập hợp điểm
· Đối với DirectX, nó gọi trực tiếp hàm DrawLine của card đồ họa, và card đồ họa sẽ vẽ ngay
ra một đường thẳng không cần phải tính toán đến các điểm trung gian Đây là phương pháp sử dụng phần cứng để vẽ ra một ảnh Vector Nhờ DirectX mà tốc độ render được cải thiện đáng kể vì phần cứng thì chạy nhanh hơn rất nhiều so với phần mềm cùng một chức năng
Với WPF, nhà phát triển không còn phải đau đầu với bài toán xử lí tốc độ, nhất là đối với các phần mềm game hiện đại ngày nay, đòi hỏi đồ họa 3D sinh động mà GDI/GDI+ khó lòng có thể đáp ứng được Với WPF, nhà phát triển có thể tự do sáng tạo về giao diện, tạo nên các hiệu ứng bắt mắt mà trước đây không thể nào thực hiện được với Windows Forms
Mặc dù người ta biết đến WPF với khả năng đồ họa tuyệt vời, với hình ảnh động, với các tính năng 3D độc đáo, nhưng WPF vẫn có thể được dùng để xây dựng nên các ứng dụng Windows truyền thống, sử dụng các control chuẩn như trong Windows Forms Sự thật là khi chọn lựa kiểu giao diện truyền thống này, thì các thao tác đối với control không khác bao nhiêu so với Windows Forms, và nhà phát triển có thể dễ dàng làm quen ngay với môi trường mới mà không mất quá nhiều công sức
Có một vài cải tiến trong WPF không thuộc về phần giao diện, nhưng chúng đáng được lưu ý khi nhà phát triển muốn phát triển một ứng dụng chuyên nghiệp và bài bản hơn Có thể kể ra đó là:
· Mô hình Data-Binding mới được cải thiện nhiều so với Windows Forms
· Các class dùng để phục vụ cho việc in tài liệu và sắp xếp trình tự in ấn
· Hệ thống tài liệu có thể hiển thị một số lượng rất lớn các văn bản được định dạng như Word, Excel, PDF…
Trang 17· Xây dựng ứng dụng page-based như website, có thể chạy trên Internet Explorer và môi trường World Wide Web, không bị các cảnh báo về bảo mật và không cần thực hiện quá trình cài đặt (Portable Applications)
4 Ƣu điểm nổi bật của WPF
Có một số các tính năng mới trong WPF mà bạn có thể tận dụng khi bạn phát triển các ứng dụng WPF của bạn Trước tiên, để sử dụng sức mạnh phần cứng đồ họa WPF mới thì thực hiện một mô hình đồ họa véc tơ, dựa vào các Direct3D Điều này cho phép công nghệ đồ họa tùy ý thu nhỏ độ phân giải màn hình mà không mất đi chất lượng hình ảnh, cũng không thể sửa kích thước
đồ họa
Ngoài ra, để hình dung dễ dàng giao diện người dùng (UI), WPF giới thiệu ngôn ngữ mới dựa trên XML, được gọi là XAML XAML cho phép các ứng dụng tự động phân tích c ú pháp và thao tác giao diện người dùng ở một trong hai yếu tố thời gian thiết kế hoặc thời gian khởi động Nó dùng mô hình code-behind, lập trình tương tự như ASP.NET, cho phép người thiết kế và người phát triển làm việc song song và liền mạch công việc của mình Tất nhiên, WPF cũng cung cấp cho bạn những lựa chọn để không sử dụng các tập tin XAML khi bạn phát triển các ứng dụng WPF, có nghĩa là bạn vẫn có thể phát triển các ứng dụng của bạn hoàn toàn bằng code như C#, C/C++, hoặc Visual Basic
Một trong những điều gây đau đầu cho những lập trình viên khi lập trình với DirectX đó là các đặc điểm mà nhà sản xuất card đồ họa cung cấp hỗ trợ DirectX Tuy vậy với WPF điều đó không đáng lo ngại, bởi nó có khả năng thực thi những công việc dựa trên những tính to án phần mềm thay vì những đặc điểm mà nhà cung cấp phần cứng tạo ra WPF đủ thông minh để xác đính sự hỗ trợ của phần cứng với những hiệu ứng đồ họa được tạo ra Và bạn không cần phải bận tâm về điều
đó Tất nhiên với những hiệu ứng animation phức tạp, nhưng được thực thi trên một nền tảng phần cứng đã cũ thì cũng sẽ có những ảnh hưởng nhất định đối với quá trình thực thi
Những đặc điểm đó đủ tạo ra những cải tiến hấp dẫn cho WPF, nhưng nó còn cung cấp những thay đổi mạnh mẽ khác cho công nghệ lập trình giao diện Và dưới đây sẽ là một loạt những hỗ trợ mà công nghệ WPF mang lại cho người lập trình viên:
Mô hình giao diện Web (Web-like layout model): không chỉ cho phép xây dựng những giao diện với những đối tượng cố định , WPF còn cung cấp những layout linh hoạt
Trang 18để hiện thị, cho phép xây dựng những giao diện động theo nội dung, với những ngôn ngữ khác nhau
Đồ họa phong phú: Thay vì làm việc với những điểm ảnh, bạn được có thể làm việc trực tiếp với những đối tượng hình học cơ bản: hình chữ nhật, hình eclipse Bạn cũng có những đặc điểm mới như điều khiển độ trong, độ mờ, cùng các hiệu ứng 3D
Hiển thị văn bản linh hoạt: WPF có khả năng cung cấp những khả năng để hiện thị văn bản một cách phong phú ở bất cứ đâu Bạn có thể kết hợp văn bản với các đối tượng khác Hay có thể sử dụng các đặc điểm mới để hiện thị một lượng lớn văn bản một cách dễ đọc nhất
Các hiệu ứng Animation: Bạn có thể sử dụng bộ tính thời gian timer để vẽ lại hình Nhưng trong WPF với đặc điểm đã được tích hợp thành một phần của Framework Từ đó bạn có thể định nghĩa những hiệu ứng chuyện động cho các đối tượng đồ họa khác nhau
Hỗ trợ video, audio file: Không giống như các công nghệ trước đó như Winform có
sự hạn chế trong việc hỗ trợ để chạy các file Audio và Video WPF hỗ trợ chạy tất các file
mà Window Meida Player có thể đọc được, và cho phép bạn có thể chạy đồng thời một hoặc nhiều file Đặc biệt WPF cung cấp các tool cho phép bạn tích hợp các các nội dung video vào giao diện, và cả các hiệu ứng 3D (ví dụ hiện thị video trên các mặt của hình hộp 3D)
Còn rất nhiều đặc điểm mạnh mẽ khác mà WPF cung cấp để hỗ trợ quá trình thiết kế và lập trình như : Stypes and Template, Command, Pages Base Application….WPF được coi như là công nghệ để tạo ra giao diện cho những ứng dụng Window của thế hệ tiếp theo.Độ phân giải độc lập: cũng là một trong những đặc điểm khác tạo ra sự khác biệt cho công nghệ WPF Nếu như các giao diện được thiết kế bằng các công nghệ trước như Winform vốn dựa trên GDI/GDI+ sẽ gặp nhiều phiền phức khi làm việc với những màn hình có độ phân giải khác nhau Hình vẽ sẽ lớn hơn với các màn hình có độ phân giải thập, hay nhỏ đi với khi độ phân giải màn hình cao Nhưng trong WPF điều đó không còn là vấn đề quan ngại với những người thiết kế Bởi WPF cho phép hiện thị các đối tượng với đúng kích cỡ khi thiết kế dưới các độ phân giải khác nhau của màn hình
Trang 19Hiển thị ảnh Vector thay vì ảnh BitMap mang lại cho công nghệ WPF khả năng hiện thị linh hoạt với nhiều kích thước khác nhau mà không lo làm “vỡ” hình ảnh những đối tượng đồ họa.Sự độc lập giữa thiết kế và lập trình là một trong những bước tiến mà WPF mang lại Các đối tượng
đồ họa trong WPF được thể hiện thông qua một loại mã đơn giản là XAML (Extention MakeUp Language) Đó là một loại mã đơn giản gần giống như HTML dùng để t ạo và tinh chỉnh các đối tượng đồ họa Đó là một bước tiến lớn trong quá trình thiết kế và lập trình giao diện
XAML cho phép người thiết kế có thể tạo ra các giao diện độc lập trên các công cụ thiết kế chuyên biệt như Microsoft Expression Interactive Designer Sau đó các giao diện đó được xuất ra dưới dạng mã XAML và người lập trình chỉ cần import vào các tool như Visual Studio để tạo ra giao diện cho chương trình của mình Điều nãy rõ ràng làm giảm đi rất nhiều công sức và độ phức tạp trong quá trình thiết kế phần mềm Nó cho phép hai người với vai trò khác nhau có thể tiến hành song song công việc của mình
5 Bộ thƣ viện của WPF
Giờ đây WPF hỗ trợ nhiều tính năng lập trình giao diện trong cùng một công nghệ đơn nhất Điều này giúp cho quá trình tạo giao diện người dùng trở nên dễ dàng hơn đáng kể
Windows Forms
PDF Windows
Forms/
GDI+
Windows Media Player
Trang 20Phần II: GIỚI THIỆU VỀ 3D
Microsoft Windows Vista là phiên bản đầu tiên của Windows có tích hợp sẵn đồ họa 3D, và giờ đây 3D được tích hợp với Microsoft Windows Presentation Foudation(WPF), giao diện lập trình ứng dụng client(API) được giới thiệu trong năm 2006 như một phần của Microsoft NET Framework 3.0 mặc dù NET 3.0 được tích hợp trong Windows Vista, bạn cũng có thể cài đặt nó dưới Microsoft Windows XP với Service Pack 2 hoặc Windows Server 2003 với Service Pack 1
Kể từ lần đầu xuất hiện(năm 1995), DirectX đã nhanh chóng phát triển cùng với sự phát triển mạnh mẽ của game đồ họa Giờ DirectX đã được tích hợp vào một phần của Windows Tuy vậy lập trình với DirectX không đơn giản và thực sự chúng khá phức tạp Chính vì vậy nó chưa bao giờ được sử dụng để tạo ra những giao diện đồ họa cho các phần mềm ứng dụng
WPF ra đời và thay đổi tất cả điều đó WPF không dựa trên nền tảng truyền thống là GDI/GDI+ Điểm đặc biệt chính là DirectX làm nền tảng cho bất cứ giao diện nào được tạo ra Dù
đó là hình ảnh 3D phức tạp hay đơn giản cho là một button, hiển thị text thì nó cũng thông qua DirectX Điều đó đồng nghĩa với việc những ứng dụng thông thường cũng có thể c ó những hiệu ứng đồ họa phức tạp, ví dụ như những hiệu ứng trong suốt, bóng đổ Và cũng nhờ thế mà có thể tăng tốc xử lý đồ họa thông qua sự tương tác giữa DirectX và c ard đồ họa
Cấu trúc đơn giản để tạo một hình ảnh 3D
Sơ đồ 1: Cấu trúc đơn giản để tạo ra hình hộp 3D
Để tạo ra được hình hộp 3D thì điều đầu tiên bạn phải làm là định nghĩa một đối tượng, một vật thể trong không gian thông qua một đối tượng đó là MeshGeometry3D, đối tượng này bao gồm Positions chứa các đỉnh của hình và TriangleIndices mô tả cách kết nối những đỉnh
để tạo thành một vật thể mà ta muốn định nghĩa
Hình Hộp 3D
Camera Light
MeshGeometry3D Material
Trang 21Thứ hai là chúng ta sẽ định nghĩa màu cho đối tượng với Material hoặc có thể dùng thêm đối tượng BackMaterial để tô màu ở mặt sau của vật thể
Và một yếu tố mà tạo nên bề mặt nổi cho vật thể mà khi nhìn vào chúng ta có cảm giác như một hình ảnh 3D đó là Light, nếu như không có đối tượng này thì bạn không thể thấy được hình ảnh 3D mà thay vào đó là một hình phẳng
Nhưng một yếu tố không kém phần quan trọng đó là Camera Camera dùng để khai báo góc
độ nhìn cho vật thể, nếu không có đối tượng này thì bạn không thể nhìn thấy được vật thể
Trang 22(1,0,1) (0,0,1)
(0,0,0)
Trang 23Chương 1: GIỚI THIỆU GÓC NHÌN, ÁNH SÁNG VÀ MÔ TẢ KHÔNG
GIAN TỌA ĐỘ
1 Tổng quan
Kể từ khi các nghệ sĩ của thời đại Upper Paleolithic bắt đầu tô điểm những bức tường hang động với hình ảnh của thợ săn và con mồi của họ, người này đã cố gắng để mô tả ba chiều, thực tế các đối tượng trên bề mặt hai chiều Trên báo chí, tạp chí, sách, bảo tàng, album ảnh, rạp chiếu phim, thư viện video, và máy tính đã được đầy đủ các kết quả về hình ảnh ba chiều
Nhận thức của con người như vậy là hài hòa với không gian ba chiều của thế giới thực mà chúng ta dễ dàng thuyết phục để chấp nhận, ngay c ả bản vẽ đơn giản như là đ ại diện cho các đối tượng thực tế
Ví dụ chỉ là một vòng tròn hình học:
Hình 1-1: Hình tròn
Nhưng thêm một bóng nhỏ, và nó sẽ trở thành một quả bóng:
Hình 1-2: Hình quả bóng
Trang 24Một vòng tròn đơn giản chỉ là màu với một RadialGradientBrush.Các thay đổi từ màu đỏ trên các cạnh đến trắng tại điểm quy định với GradientOrigin
Các lớp thư viện đồ họa ba chiều trong Windows Presentation Foundation (viết tắt là WPF 3D) thực hiện tất cả các toán học cần thiết để thực hiện một hình ảnh ba chiều lên một bề mặt hai chiều như một màn hình máy tính hoặc máy in Người lập trình có thể chọ n kiểu chiếu mà mình muố n bằng cách lựa chọ n một trong các lớp rút ra từ các lớp Camera được định nghĩa trong NET với namespace System.Windows.Media.Media3D Hai lớp được đặt tên
OrthographicCamera và PerspectiveCamera thực hiện các phép biến đổi cần thiết cho các chuyển đổi và chiếu theo tia nhìn WPF 3D cũng bao gồm một lớp MatrixCamera cho các mục đích cao cấp mà có thể thực hiện tùy ý các đối tượng ba chiều trên các bề mặt hai chiều
Để xác định được vị trí hay góc độ nhìn thì ta dựa vào hệ trục tọa độ và các điểm thông qua hệ trục tọa độ
1.1 Tọa độ ba chiều
Hình 1.1-1: Hệ trục tọa độ.
Ba trục gặp nhau tại một gốc Tăng giá trị của X là bên phải; giá trị gia tăng của Y là trở lên; giá trị gia tăng của Z đi ra khỏi màn hình máy tính và hướng tới người xem Điều này được biết đến như một bàn tay bên phải phối hợp hệ thống: Nếu bạn điểm các ngón trỏ của tay phải của bạn
Trang 25theo hướng tăng giá trị X và điểm ngón tay giữa để tăng giá trị Y, và điểm ngón tay cái để tăng giá trị Z
Biểu đồ cho thấy cách phối hợp hệ thống là tùy vào từng hình, bởi vì nó thật sự phụ thuộc vào cách bạn xem nó Bạn có thể xem nó từ tất cả các hướng khác nhau Thật vậy, nếu tôi định hướng
sơ đồ để trục Z chỉ chính xác đối với người xem, các trục sẽ được nhìn thấy chỉ như là một điểm Cũng như hai trục của hai chiều Cartesian hệ thống phân chia thành bốn mặt phẳng, ba trục trong không gian ba chiều phân chia thành tám mặt phẳng Tám mặt phẳng không có tên tiêu chuẩn, nhưng ba trục được gọi là mặt phẳng YZ, mặt phẳng XZ, và mặt phẳng XY:
Mặt phẳng YZ chia không gian vào bên phải(right) (X > 0) và trái(left) (X < 0)
Mặt phẳng XZ phân chia không gian vào đ ầu trang(top), hay trên(upper) (Y > 0),
và dưới cùng(bottom), hoặc thấp hơn(lower) (Y < 0)
Mặt phẳng XY phân chia không gian vào phía trước(front) (Z > 0) và ở phía
sau(back), hoặc phía sau(rear) (Z < 0)
Mỗi mặt phẳng trong số tám mặt phẳng sau đó có thể được mô tả với một cụm từ như "phía dưới bên trái phía trước" Đó là cụm từ đặc biệt dùng để chỉ tất cả các điểm trong đó X là số âm,
Y là số âm, và Z là số dương
1.2 Điểm trong không gian
Một vị trí chính xác trong không gian ba chiều được đại diện bởi các điểm (X, Y, Z) WPF 3D xác định cấu trúc của Point3D chứa các điểm (X, Y, Z) có thể đọc hoặc tạo các điểm X, Y, và Z của loại Double, và một constructor tạo ra một đối tượng Point3D từ X, Y, Z và các thành phần của nó
Dưới đây là một số cách để tạo và khởi tạo một đối tượng Point3D bằng C#:
Point3D point = new Point3D (2.33, 1.5, -2);
Trang 26Trong đó: X = 2.33, Y = 1.5 và Z = -2
Trong XAML, giá trị của đối tượng Point3D được phân biệt bởi khoảng trắng hoặc dấu phẩy:
Thông thường, một ứng dụng WPF 3D phải chỉ định một tâp hợp các điểm cho đối tượng
Point3D, và được sử dụng lớp Point3Dcollection, lớp này sẽ Add các điểm của đối tượng
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));
Bên cạnh Point3DCollection, còn có Int32Collection tương tự (được định nghĩa trong không gian tên System.Windows.Media) Cả hai Point3DCollection và
Int32Collection bắt nguồn từ một lớp có tên là Freezable
Sơ đồ 2: Lớp con trong lớp Media.
Trong namespase System.Windows.Media.Media3D cũng bao gồm một cấu trúc có tên là
Size3D mà chứa kích thước không gian ba chiều với các thuộc tính có tên là X, Y, và Z Một đối tượng Size3D với X, Y, và Z tất đều bằng 0 được coi là rỗng
Cấu trúc Rect3D định nghĩa một hình chữ nhật trong khôsng gian 3D là một sự kết hợp của một đối tượng vị trí (Point3D) và một cấu trúc kích thước (Size3D) Ba thành phần của thuộc kích thước phải không âm, vị trí luôn luôn ở góc lower-left-rear của hình chữ nhật Rect3D cũng
System.Windows.Media
Point3DCollection
FreezableSystem.Windows.Media
Trang 27định nghĩa các thuộc tính X, Y, và Z, trong đó các thuộc tính X, Y, Z giống thuộc tính của đối tượng Point3D
<PerspectiveCamera Position="-2 0 5" … />
Bạn cũng c ần phải chỉ định một hướng, được gọi là LookDirection nó được gọi là một hướng vì nó là một đối tượng Vector3D Thông thường bạn sẽ đặt hướng này trong nửa sau của không gian 3D Các vector đơn giản có thể sử dụng là một điểm trong có hướng song song với trục Z âm, là vector (0, 0, -1):
<PerspectiveCamera Position = "-2 0 5"
LookDirection = "0 0 -1" />
Thay thế (0, 0, -2), (0, 0, -3),… vẫn sẽ làm việc giống như vậy Do đó (0, 0, -1) là giá trị mặc định của LookDirection và giá trị mặc định của Position là điểm (0, 0, 0
Bạn có thể sử dụng PerspectiveCamera với cách chỉ xác định Position và
LookDirection, tuy nhiên ở đây chúng ta sẽ sử dụng các giá trị mặc định của hai thuộc tính khác Các thuộc tính UpDirection là một thuộc tính Vector3D cho biết làm thế nào máy ảnh được định hướng Mặc định vector này là (0, 1, 0 và chỉ ra rằng máy ảnh này được tổ chức để hướng chỉ theo hướng Y dương
Thuộc tính tiếp theo của PerspectiveCamera là FieldOfView, đó là một góc mà bạn chỉ định bằng độ Mặc định là 45 độ:
Trang 28Hình 2-1: Camera với góc nhìn 50mm
Căn cứ vào chiều rộng của bộ phim và khoảng cách của pinhole từ bộ phim, góc độ xem là kho ảng 40 độ Đó là tính bằng cách lấy một nửa chiều rộng của phim (18mm), phân chia theo độ dài tiêu cự (50 mm), dùng các tiếp tuyến nghịch đảo, và sau đó tăng gấp đôi Góc độ xem trong WPF 3D là dựa trên chiều rộng hơn là chiều cao, do đó theo chiều ngang 40 độ xem được liên kết với một ống kính tiêu chuẩn 50mm hiện có, giống như các thuộc tính FieldOfView với độ mặc định là 45 độ cho lớp PerspectiveCamera
Một ống kính tele 100mm vừa phải trông như thế này:
Hình 2-2: Camera với góc nhìn 100mm
Trang 29Góc độ xem hẹp hơn Một ống kính góc rộng có thể có một tiêu c ự khoảng 25mm: góc độ xem rộng lớn hơn:
Hình 2-3: Camera với góc nhìn 25mm
Trong c ảnh 3D đã thiết lập, tam giác nằm trên trục Z với Z tọa độ mà phạm vi đi từ 0 đến -2 Các camera được đặt tại điểm (-2, 0, 5) chỉ theo hướng Z âm với một góc độ xem là 45 độ Thì trên hình ảnh của thiết lập này trông giống như sau:
Hình 2-4: Camera với góc nhìn 45 độ.
Hộp màu xám là máy ảnh Tam giác này được đại diện bởi các đường màu xám dày hơn trên trục Z Nếu máy ảnh lệch hơn về phía bên trái, hoặc gần hơn với trục X, ho ặc thấp hơn, nó s ẽ không cho thấy hết toàn bộ tam giác
Trang 30Khi chạy chương trình chúng ta sẽ nhìn thấy hình tam giác ở phía bên phải của màn hình Một ví dụ tổng quát về cách hiển thị vật thể khi dùng PerspectiveCamera:
WindowTitle="Perspective Square Cuboid"
Title="Perspective Square Cuboid">
<! Square cuboid sides in order:
front, left, top, right, bottom, rear >
Trang 31Thứ hai ta sẽ thay thế PerspectiveCamera bằng OrthographicCamera
PerspectiveCamera xác định có một thuộc tính riêng của chính nó đó là FieldOfView
OrthographicCamera cũng định nghĩa một thuộc tính duy nhất công khai đó là Width, và cho
Trang 32WindowTitle="Orthographic Square Cuboid"
Title="Orthographic Square Cuboid">
<! Square cuboid sides in order:
front, left, top, right, bottom, rear >
4 5 6, 5 7 6,
8 9 10, 9 11 10,
12 13 14, 13 15 14,
16 17 18, 17 19 18,
Trang 34hạn như 00-FF-FF cho cyan Khi tôi đặc biệt đề cập đến một màu sắc RGB mà có thể xuất hiện trong XAML, tôi sẽ sử dụng cú pháp văn bản, chẳng hạn như "#00FFFF"
Có 4 cách để khai báo ánh sáng cho vật thể:
DirectionLight Chiếu tia song song vào vật thể từ một gốc ở vô cực
PointLight Bức xạ ánh sáng từ một điểm trong vật thể
SpotLight Phát ra một hình nón của ánh sáng từ một điểm trong vật thể
AmbientLight Khuếch tán ánh sáng trên bề mặt vật thể
Bảng 2: Các thuộc tính c ủa Light.
Thông thường hay sử dụng thuộc tính DirectionalLight nhất Hoặc có thể kết hợp nhiều kiểu light trong cùng một ứng dụng
3.1 DirectionalLight
DirectionalLight giống như một nguồn ánh sáng rất xa mà các tia sáng chiếu song song vào vật thể, như ánh sáng t ừ mặt trời chiếu xuống trái đ ất
Đây là hình ảnh minh họa các DirectionalLight sau chiếu xuống trên một mặt cầu:
<DirectionalLight Direction=”1 -1 -0.5” Color=”White”/>
Hình 3.1-1: Hình minh họa sử dụng DirectionalLight
Trang 35Hình ảnh tạo ra với một DirectionalLight duy nhất thường nhìn không tự nhiên Trong thế giới thực, ngay c ả khi ánh sáng đi vào một cảnh nào đó từ một hướng duy nhất (Như ánh nắng), nó thường bị phản chiếu lại kho ảng giữa các đối tượng Một cách để gần giống như ánh nắng này là có thể thêm một AmbientLight cường độ thấp
3.2 PointLight
PointLight giống như một bóng đèn phát ra ánh sáng theo mọi hướng Một đối tượng
PointLight có một vị trí đặc biệt trong không gian 3D để các tia ánh sáng chiếu trên bề mặt phẳng ở nhiều góc độ:
ConstantAttenuation=”0”
LinearAttenuation=”0”
QuadraticAttenuation=”0.125”/>
Hình 3.2-1: Hình minh họa sử dụng PoinLight
Khi dùng PointLight nó được ví như trong một căn phòng với một bóng đèn trần treo từ trần nhà, trung tâm của bức tường, trần và sàn là vuông góc với ánh sáng và được chiếu sáng nhất, trong khi các góc của căn phòng là tối hơn
Trang 36Hình 3.3-1: Hình minh họa sử dụng SpotLight
3.4 AmbientLight
AmbientLights thường được sử dụng để ước tính hiệu quả của ánh sáng mà đã được phân tán do phản chiếu của các bề mặt khuếch tán trong cảnh Tia sáng từ một AmbientLight tất cả
bề mặt được chiếu từ mọi hướng
Hình 3.4-1: Hình minh họa sử dụng AmbientLight
AmbientLights chỉ có một thuộc tính duy nhất là Color
<AmbientLight Color=”White”/>
4 Mô tả không gian tọa độ
Theo truyền thống về đồ họa 3D, các mặt của hình khối được định nghĩa bởi một khối đa giác,và 3D phối hợp các điểm bố trí để tạo thành đa giác Đối với mặt phẳng, thường chỉ là một vài hình đa giác là cần thiết, nhưng bề mặt cong đa giác đòi hỏi nhiều tính gần đúng độ cong của các hình vẽ
Trong WPF 3D, hình thức đơn giản nhất của đa giác là tam giác Tam giác là rất hữu ích trong
đồ họa 3D Bất kỳ ba điểm không trùng và ba điểm không gần nhau thì ta xác định một tam giác
Trang 37Trong WPF 3D, 3D đơn giản bao gồm một hình tam giác duy nhất, chẳng hạn như hình sau trên mặt phẳng YZ với ba đỉnh:
Hình 4-1: Hình ảnh tam giác trên mặt phẳng
Khi thiết lập một hình ảnh 3D, cách đơn giản nhất là tạo ra các con số Bạn có thể cho nó xuất phát từ tâm, hoặc đặt một góc ở gốc, ho ặc bất cứ vị trí thuận tiện nào Các đơn vị của không gian 3D không có ý nghĩa vật lý, mọi thứ đều tương đối
Bạn chỉ rõ đỉnh của tam giác và kết nối các đỉnh với một đối tượng của MeshGeometry3D Hai yếu tố cần thiết của MeshGeometry3D là Positions và TriangleIndices, cả hai đều là
bộ sưu tập Các Positions chứa các đỉnh của hình và TriangleIndices mô tả cách kết nối những đỉnh để tạo thành hình tam giác
Trước hết ta sẽ xác định các điểm dựa trên hệ trục tọa độ Oxyz
Trang 38Hình 4-2: Cách xác định các đỉnh dựa trên hệ trục tọa độ Oxyz
Một ví dụ bằng XAML: Positions là thuộc tính của Point3DCollection và chứa một đối tượng Point3D Các đánh dấu sau đây cho thấy ba đỉnh của tam giác này cách nhau bằng dấu phẩy, và TriangleIndices chỉ chứa một hình tam giác duy nhất, đó là ba điểm:
là bạn phải phân biệt giữa chúng một cách nào đó Khi tam giác là nhìn từ phía trước, ba chỉ số trong bộ TriangleIndices được xác định các đỉnh của tam giác theo hướng ngược chiều Lấy ví dụ tập hợp bộ sưu tập của TriangleIndices là "1 2 0" hoặc "2 0 1" là chính xác giống như "0 1 2" bởi vì trong tất cả các trường hợp, ba chỉ số các đỉnh của tam giác theo hướng ngược chiều khi tam giác là nhìn từ phía trước
Trang 39Mặt khác, nếu bạn đã có quy định "0 2 1" hoặc "2 1 0" hoặc "1 0 2," phía bên của tam giác đối diện với vị trí trục X sẽ được xem xét phía trước
Trong WPF 3D thì mỗi mặt của một vật thể được chia thành hai mặt: mặt trước và mặt sau Nếu bạn nối tam giác lại theo chiều ngược chiều kim đồng hồ thì nó được qui định là mặt trước và ngược lại, nếu nối chiều kim đồng hồ thì nó là mặt sau, và nó được mô tả bằng hình ảnh sau:
Hình 4-3: Mặt trước của hình vuông Hình 4-4: Mặt sau của hình vuông
Các đối tượng MeshGeometry3D định nghĩa hình học của hình vẽ Bạn cần xác định màu cho
bề mặt của đối tượng Đối với công việc này bạn sử dụng một đối tượng DiffuseMaterial Lớp DiffuseMaterial là nhằm cung cấp các Brush, xác định các giá trị màu của Brush, bạn
sẽ thiết lập thuộc tính Brush của DiffuseMaterial với một trong những thuộc tính chỉ đọc tĩnh của lớp Brushes:
<DiffuseMaterial Brush="Cyan" />
Các MeshGeometry3D và hai đối tượng Material thuộc GeometryModel3D, trong đó có
ba tính chất thiết yếu: Các Geometry là thuộc tính của MeshGeometry3D, còn Material và
BackMaterial tô màu cho mặt trước và mặt sau của các đối tượng