Ngược lại, môi trường ảo lại có những phản ứng tương ứng với mỗi hành động của người sử dụng, tác động vào các giác quan như thị giác, thính giác, xúc giác của người sử dụng trong thời g
Trang 1MỤC LỤC
MỤC LỤC 1
LỜI GIỚI THIỆU 2
CHƯƠNG I : TỔNG QUAN VỀ THỰC TẠI ẢO,MÔ HÌNH XỬ LÝ MORFIT VÀ PARTICLE TRONG THỰC TẠI ẢO 3
1.1 Tổng quan về thực tại ảo 3
1.1.1 Sơ lược lịch sử phát triển 3
1.1.2 Các lĩnh vực ứng dụng của Thực tại ảo 4
1.2 Tổng quan về particle trong thực tại ảo 33
1.2.1 Particle trong thực tại ảo là gì? 33
1.2.2 Hiệu ứng particle trong thực tại ảo 34
1.2.3 Cơ sở mô phỏng hiệu ứng các particle 34
1.2.4 Các vấn đề gặp phải trong quá trình tìm hiểu và nghiên cứu 37
1.2.5 Hướng giả quyết 37
CHƯƠNG II : KỸ THUẬT MÔ PHỎNG 37
2.1 Đặt vấn đề 38
2.2 Kỹ thuật mô phỏng 39
2.2.1 Tạo ra một particle mới 39
2.2.2 Khởi động các particle 45
2.2.3 Cập nhật particle: 48
CHƯƠNG III: CHƯƠNG TRÌNH MÔ PHỎNG 53
3.1 Bài toán 53
3.2 Mục đích và yêu cầu bài toán 53
3.3 Phương pháp giải quyết bài toán 54
3.4 Phân tích chương trình và giả quyết bài toán 54
3.5 Một số kết quả của bài toán 55
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN ĐỀ TÀI 59
TÀI LIỆU THAM KHẢO Error! Bookmark not defined PHỤ LỤC 60
1 Nội dung một số tệp đầu *.h 62
2 Nội dung một số tệp chương trình *.CPP 79
Trang 2LỜI GIỚI THIỆU
Ngày nay với sự phát triển của khoa học - công nghệ cuộc sống con người đã ngày càng thay đổi Những ứng dụng của nó vào cuộc sống ngày càng phong phú, đa dạng và thiết thực hơn Từ các lĩnh vực cơ bản như khoa học cơ bản, kinh tế, kỹ thuật cho đến các lĩnh vực như giải trí, du lịch, không lĩnh vực nào không có sự ứng dụng thiết thực và hiệu quả của công nghệ thông tin Sự phát triển không ngừng của sức mạnh máy tính đã làm cho một số lĩnh vực khó phát triển trước kia nay đã có khả năng phát triển và đã đạt được những thành tựu đáng kể Chúng ta có thể kể đến cả các lĩnh vực như: các hệ chuyên gia, các
hệ xử lý thời gian thực…và một lĩnh vực khác cũng cần phải nói là Thực tại ảo (Virtual reality) và những ứng dụng của nó trong công nghệ Trong thực tại ảo thì Particle lại là một thành phần vô cùng quan trọng Chính vì vậy mà đồ án tốt nghiệp này, dưới sự hướng dẫn của thầy giáo Th.S Nguyễn Văn Huân bộ môn Các hệ thống thông tin – Khoa công nghệ thông tin - Đại hoc Thái Nguyên, em được hướng dẫn tìm hiểu đề tài: Mô phỏng hiệu ứng của Particle trong xây dựng môi trường thực tại ảo
Trang 3CHƯƠNG I TỔNG QUAN VỀ THỰC TẠI ẢO VÀ PARTICLE
TRONG THỰC TẠI ẢO1.1 Tổng quan về thực tại ảo
Theo cách truyền thống, việc tương tác với máy tính được thực hiện thông qua các thiết bị như bàn phím, chuột hay Joystick/Trackball/Keyboard/Styplus
để cung cấp thông tin đầu vào và sử dụng khối hiển thị trực quan (Video Display Unit-VDU) để nhận thông tin đầu ra từ hệ thống Với sự ra đời của các
hệ thống Thực tại ảo (Virtual Reality-VR), các phương thức giao tiếp mới được phát triển cho phép người sử dụng tương tác một cách tích cực với máy tính Thực tại ảo là công nghệ sử dụng các kỹ thuật mô hình hoá không gian ba chiều với sự hỗ trợ của các thiết bị đa phương tiện hiện đại để xây dựng một thế
giới mô phỏng bằng máy tính – môi trường ảo (Virtual Environment) Trong thế
giới ảo này, người sử dụng không còn được xem như người quan sát bên ngoài,
mà đã thực sự trở thành một phần của hệ thống Một cách lý tưởng, người sử dụng có thể tự do chuyển động trong không gian ba chiều, tương tác với các vật thể ảo, quan sát và khảo cứu thế giới ảo ở những góc độ khác nhau về mặt không gian Ngược lại, môi trường ảo lại có những phản ứng tương ứng với mỗi hành động của người sử dụng, tác động vào các giác quan như thị giác, thính giác, xúc giác của người sử dụng trong thời gian thực và tuân theo những quy tắc vật lý tự nhiên, làm anh ta có cảm giác như đang tồn tại trong một thế giới thực
Mục tiêu của phần tổng quan này là đưa ra một số nét tổng quát về công nghệ Thực tại ảo, trong đó bao gồm: một số nét chính trong lịch sử hình thành, các lĩnh vực ứng dụng, phân loại hệ thống, các phương pháp & công cụ phần mềm phổ biến tạo ra mô hình VR
1.1.1 Sơ lược lịch sử phát triển
Mặc dù Thực tại ảo được mô tả như một công nghệ mới mang tính cách mạng, nhưng ý tưởng về việc nhúng người sử dụng vào một môi trường nhân
Trang 4tạo đã ra đời từ rất sớm Thực tại ảo có thể được xem như một sự tiếp nối của
những ý tưởng đã lâu như hệ thống mô phỏng bay (Flight Simulation), rạp chiếu phim màn ảnh rộng (như Cinerama hay IMAX), rạp chiếu phim nổi v.v… Sử
dụng các hệ thống như vậy, người quan sát có cảm giác hình ảnh đang sống động ngay trước mắt mình
Sự ra đời của các máy điện toán mini và bài báo khoa học của Ivan
Sutherland có tên “Màn hình tối tân” (Ultimate Display) vào năm 1965 được
xem là hai bước đột phá lớn vào thập kỷ 60 cho công nghệ Thực tại ảo Trong
bài báo của mình, Sutherland đã tiên đoán sự phát triển của Thiết bị Hiển thị đội đầu (Head Mounted Display-HMD) đầu tiên, mà sau đó chính ông đã tạo ra một thiết bị như vậy, có tên là “Thanh kiếm của Damocles” (The Sword of
Damocles) Sutherland cũng nhận ra tiềm năng của máy điện toán trong việc tạo lập hình ảnh cho hệ thống mô phỏng bay, trong khi những hình ảnh này trước
đó được xây dựng bằng Video Camera
Những ý tưởng này được hai nhà khoa học Mỹ ở NASA là Fisher và
McGreevy kết hợp lại trong một dự án có tên là “Trạm làm việc ảo” (Visual
Workstation) vào năm 1984 Cũng từ đó NASA phát triển thiết bị Hiển thị đội
đầu có tính thương mại đầu tiên, được gọi là màn hình môi trường trực quan
(Visual Environment Display - VIVED), thiết kế dựa trên mẫu hình mặt nạ lặn với các màn hình quang học mà hình ảnh được cung cấp bởi hai thiết bị truyền hình cầm tay Sony Watchman Sự phát triển của thiết bị này đã thành công ngoài dự đoán, bởi NASA đã sản xuất được một thiết bị HMD có giá chấp nhận được trên thị trường, và như vậy ngành công nghiệp Thực tại ảo đã ra đời
1.1.2 Các lĩnh vực ứng dụng của Thực tại ảo
Mặc dù khái niệm về Thực tại ảo đã xuất hiện từ khá lâu, nhưng do nhiều
lý do về mặt công nghệ (cơ sở phần cứng phát triển, nghiên cứu, chi phí), phải mất nhiều thời gian và nỗ lực để Thực tại ảo có được những thành tựu như ngày nay Hiện tại đây vẫn là lĩnh vực công nghệ nhiều tiềm năng xét về khía cạnh ứng dụng Một số lĩnh vực ứng dụng chính có khuynh hướng phát triển mạnh
mẽ nhất trong thời gian gần đây
Trang 51.1.2.1 Kiến trúc và thiết kế thiết bị công nghệ
Một trong những lĩnh vực ứng dụng tiêu biểu nhất của Thực tại ảo là thiết
kế kiến trúc Khả năng mô hình hoá thế giới thực của công nghệ Thực tại ảo dường như đáp ứng một cách tự nhiên mục tiêu của ngành thiết kế kiến trúc: đưa ra mô hình trực quan nhất có thể về hình ảnh công trình mong muốn trong
tương lai
Hình 1 - Ứng dụng Thực tại ảo trong thiết kế kiến trúc
Việc xây dựng các mô hình không gian kiến trúc bằng hình ảnh lập thể với đầy đủ mô tả trực quan về các hình khối kiến trúc của một căn nhà, cách bố trí nội thất bên trong, thậm chí hoa văn cửa sổ hay màu sơn của tường, cùng với khả năng cho phép khách hàng tự do tham quan, khảo sát căn nhà của họ trong tương lai theo nhiều góc độ và vị trí, từ phòng này sang phòng khác thực sự đem lại hiệu quả trực quan mang tính cách mạng trong lĩnh vực mang nhiều đặc điểm nghệ thuật này
1.1.2.2 Giải trí
Thị trường giải trí cũng là một ứng dụng tiêu biểu khác của các môi trường Thực tại ảo Trên thực tế, đây là lĩnh vực ứng dụng lớn nhất xét theo khía cạnh lợi ích về tài chính Rất nhiều công ty đang sản xuất ra các trò chơi có
sử dụng các nguyên lý Thực tại ảo Số lượng người bị cuốn hút theo các trò
Trang 6chơi như vậy, đặc biệt là giới trẻ, tăng theo cấp số nhân đánh dấu tiềm năng thương mại to lớn của công nghệ Thực tại ảo trong lĩnh vực này
Hơn thế, ngành công nghiệp trò chơi điện tử có những ảnh hưởng to lớn tới lĩnh vực Thực tại ảo Nó tạo ra động lực cần thiết để thúc đẩu sự phát triển
của rất nhiều phần cứng Thực tại ảo, chẳng hạn như card tăng tốc đồ hoạ
(Graphic Accelerator Cards) Nếu như chúng ta trở lại khoảng hơn 10 năm về trước, thật khó có thể tìm thấy một card tăng tốc đồ hoạ có đủ năng lực tính toán cần thiết cho phép tạo ra các ứng dụng Thực tại ảo thời gian thực Tại thời điểm đó, những chiếc card như vậy trị giá hàng ngàn đôla và chỉ đủ khả năng sinh 100.000 đa giác/giây ở mức độ phân giải trung bình Những thiết bị phần
cứng khác như Găng tay dữ liệu (DataGloves) và Thiết bị hiển thị đội đầu
(Head Mounted Displays-HMD) cũng chịu ảnh hưởng phần nào của công nghiệp giải trí Tóm lại, các ứng dụng Thực tại ảo trong giải trí đã và đang đóng một vai trò vừa là mục tiều vừa là động lực cho công nghiệp Thực tại ảo
Hình 3 - Ứng dụng Thực tại ảo trong lĩnh vực giải trí
1.1.2.3 Giáo dục và Đào tạo
Phát triển trên nền công nghệ và kỹ thuật cao, Thực tại ảo tích hợp những đặc tính làm cho bản thân nó có những tiềm năng vượt trội so với các công nghệ
đa phương tiện truyền thống khác: cho người sử dụng cảm nhận sự hiện diện của mình trong môi trường do máy tính tạo ra bằng khả năng tương tác, tự trị (Autonomy) của người dùng trong môi trường ảo, cũng như bằng những phản
Trang 7hồi tức thời, trực quan từ phía môi trường ảo tới các giác quan của người sử dụng Hơn thế nữa, công nghệ Thực tại ảo cho phép mô phỏng những môi trường nguy hiểm hay tốn kém như buồng lái máy bay, phòng thí nghiệm hoá chất.v.v…
Hình 4 – Mô hình huấn luyện bay sử dụng công nghệ Thực tại ảo
Tất cả những đặc tính này khiến công nghệ Thực tại ảo trở nên rất phù hợp cho các ứng dụng có tính chất giáo dục hay đào tạo Trong đó, những mô hình trình diễn lập thế đóng vai trò quan trọng Các vật thể trong thế giới ảo được biểu diễn chính xác hơn nhiều so với các đối tượng phẳng (hình ảnh hai chiều)
do được bổ sung thêm chiều sâu Kết quả là các trình diễn minh hoạ hay những thí nghiệm cũng được mô phỏng chính xác hơn do có thể quan sát từ nhiều góc
độ khác nhau về mặt không gian, điều mà thế giới phẳng hai chiều không làm được
Tính chất trực quan của bài giảng được nâng cao một bước làm tăng sự hứng thú trong học tập cũng như khả năng ghi nhớ các khái niệm quan trọng trong bài giảng Xét về mặt này, khả năng tương tác với môi trường ảo là một khía cạnh đáng lưu ý Nếu thiếu đi khả năng tương tác (hai chiều) giữa môi trường ảo và người tham dự, Thực tại ảo không gì khác hơn là một giao diện lập thể ấn tượng nhưng không có sự sống Trong các phòng thí nghiệm hay huấn luyện ảo, thực hiện các thao tác trên các đối tượng trong môi trường ảo, nhận được những phản hồi kịp thời và có nghĩa từ các vật thể và môi trường là một trong những yếu tố tiên quyết khiến cho học viên có cảm nhận đang được trải
Trang 8nghiệm trong những tình huống thực Từ đó, học viên nắm bắt được nhanh chóng và có ý thức hơn với những tính huống được học Và cũng không phải là viễn tưởng khi ta có thể nói rằng một ngày nào đó bài học của học sinh sẽ là những kỹ năng sống được đào tạo trong môi trường ảo
1.1.2.4 Y học
Y học là một trong những lĩnh vực ứng dụng tiềm năng trong công nghệ Thực tại ảo Cho đến nay, lĩnh vực nổi bật trong y học áp dụng thành công công
nghệ Thực tại ảo là giả lập giải phẫu (Surgical Simulation)
Hình 5 - Phẫu thuật ảo – Phương pháp
đào tạo phẫu thuật mới dùng công nghệ
Thực tại ảo
Trên cơ sở các kỹ thuật đồ hoạ máy tính và Thực tại ảo, hệ thống đào tạo y học này bao gồm hai bộ phận cơ bản: Khối tương tác ba chiều là mô hình sinh thể ảo cho phép người sử dụng thực hiện các thao tác giải phẫu thông qua các dụng cụ giải phẫu ảo; Khối giao diện người dùng hai chiều cung cấp những thông tin phản hồi trực quan từ mô hình trong quá trình giải phẫu cũng như những thông tin hướng dẫn trong phiên đào tạo
Phương pháp đào tạo có tính tương tác cao này mang nhiều ưu điểm so với các phương pháp truyền thống như thực hành trên mô hình plastic hay trên bệnh nhân thực Thứ nhất, khác với phương pháp dùng mô hình plastic, sinh thể giải phẫu ảo có khả năng cung cấp những thông tin phản hồi sinh học một cách
Trang 9tự nhiên như một sinh thể sống thực, chẳng hạn như sự thay đổi về nhịp tim, huyết áp… Điều này tạo cho học viên có cảm giác đang trải qua một ca mổ trong một tình huống thực Thứ hai, khác với thực hành trên bệnh nhân thật, những sai lầm của học viên trong quá trình thực tập không phải trả giá bằng những thương tổn thực trên cơ thể người bệnh Điều này cũng làm giảm áp lực lên học viên khi thực hiện phẫu thuật ảo Từ đó, giúp họ tự tin và chủ động hơn trong học tập Phương pháp này còn cho phép các bác sĩ không ngừng nâng cao trình độ tay nghề, kỹ năng phối hợp làm việc bằng cách liên tục đặt ra những giả định tình huống bệnh, cập nhật những dữ liệu bệnh lý mới để thực hiện những phương pháp mới, kỹ thuật mới trong điều trị Bác sĩ cũng có thể tự lập
kế hoạch mổ thử trên bệnh nhân ảo trước khi mổ trên bệnh nhân thật do đó làm tăng mức độ an toàn và hiệu quả điều trị, giảm thiểu sai lầm rủi ro đáng tiếc xảy
ra
Xu hướng ứng dụng của thực tại ảo trong tương lai
Chúng ta đã thấy được một phần nào những kết quả to lớn của việc ứng dụng thực tại ảo và chúng ta cũng có thể thấy được một phần nào việc ứng dụng thực tại ảo trong tương lai Thực tại ảo sẽ tiếp tục được ứng dụng mạnh mẽ hơn nữa trong một số lĩnh vực và mở đường cho các ứng dụng tin học vào các lĩnh vực khác Thực tại ảo sẽ thâm nhập vào rất nhiều các lĩnh vực cũng như sự có mặt của tin học trong cuộc sống
Ý nghĩa của việc ứng dụng thực tại ảo
Những kết quả và ý nghĩa to lớn của việc ứng dụng thực tại ảo trong giai đoạn hiện nay và trong tương lai đều đã được nhắc tới Nhưng có một câu hỏi đặt ra là đằng sau những điều tuyệt vời mà thực tại ảo mạng lại, còn có cái gì làm chúng ta phải quan tâm? Vấn đề của thực tại ảo là gì? Để trả lời những câu hỏi đó, chúng ta sẽ cùng tìm hiểu chi tiết trong những phần dưới đây
Tất cả các ứng dụng thực tại ảo đều liên quan đến việc xây dựng các mô hình mô phỏng thế giới trên máy vi tính và cung cấp khả năng quan sát và tương tác của các mô hình với người sử dụng thông qua các thiết bị đầu vào và đầu ra Như vậy, có thể nói vấn đề chính của thực tại ảo là phải xây dựng mô hình mô phỏng thế giới thực trên máy tính theo không gian 3D, cung cấp các
Trang 10dịch vụ tương tác giữa môi trường mô phỏng với người sử dụng thông qua thiết
Morfit đảm bảo thực hiện được một lượng lớn các thao tác bao gồm một lượng lớn các trạng thái hình ảnh được xử lý trong mỗi giây, hình ảnh và các hiệu ứng hình ảnh có chất lượng cao Bạn có thể cố định tốc độ hoạt động của thế giới với mọi máy và khi sử dụng hoặc không sử dụng bộ tăng tốc đồ hoạ 3D Mô hình thực tại ảo Morfit dựa trên cơ sở các thuật toán và kỹ sảo tinh vi, phức tạp, bao gồm cả quyền sở hữu công nghệ PIRR (Photo realistic eractive Real-Time Rendering) Kết quả mang lại nhiều cải thiện về cả tốc độ cũng như chất lượng hình ảnh hơn hẳn các engine cơ sở khác Engine thực tại ảo morfit là một giải pháp xây dựng, và phát triển các phần mềm mô phỏng 3D cực kỳ đơn giản hiệu quả và nhanh chóng
Sử dụng morfit bạn có thể xử lý các hình ảnh 3D tới cấp độ bít Nó không bắt buộc phải sử dụng tất cả các hàm, các chức năng mà morfit cung cấp, bạn có thể sử dụng các hàm API cơ sở, hoặc các mã của DirectX3D vào trong chương trình của bạn do đó nó là một môi trường xây dựng khá thoải mái và tiện dụng
Trang 11Sử dụng Morfit bạn có thể xây dựng bất cứ phần mềm 3D cho bất kỳ lĩnh vực nào Morfit engine có đầy đủ công cụ phát triển, dễ học, có khả năng linh động cao và nhiều ưu điềm khác
1.2.2.Phương pháp định nghĩa thế giới của Morfit(WRD)
Giới thiệu chung
Để phục vụ cho việc định nghĩa thế giới các nhà phát triển Morfit đã xây dựng ra một mô hình cho phép mô tả bất kỳ sự vật nào của thế giới, đồng thời cũng cho phép mô tả một số hành vi của thế giới Bằng một số các đối tượng cơ bản dưới đây
Module: Được hiểu như một mô hình, nó xác định một khung dạng sự vật nào đó ví dụ kiến trúc toà nhà hay một cái cây vv
Polygon: Là các hình đa giác, đây là một đối tượng cơ bản, hầu hết các đối tượng đề được xây dựng nên từ các đa gác
Object: Một Object là một cài đặt của một mô hình (module) đã được định nghĩa trước Ví dụ nếu bạn có một module có tên là tree, bạn có thể có hàng trăm Object (đối tượng) có cùng hình dạng của tree ở các vị trí khác nhau Bạn cũng có thể thay đổi thuộc tính của từng đối tượng như quay nó, thay đổi vị trí của nó vv , nhưng hình dạng cơ bản của module(mô hình) đó vẫ không thay đổi
Track: Một Track xác định một đường trong thế giới, nó cho phép các đối tượng động(Dynamic object) hoặc các camera có thể chuyển động theo đường đó
Dynamic Object: Là các đối tượng động, là các đối tượng mà bạn muốn
nó chuyển động theo track hoặc bạn muốn điều khiển nó hoạt động (bằng
engine)
Camera: Là một đối tượng, nó đại diện cho góc nhình của bạn vào trong thế giới
Trang 12Animation: Thực chất là một tập hợp các hình ảnh có thứ tự được load một cách liên tục, nó thương dùng để mô tả các sự vật như đống lửa, màn hình
Phương pháp sử dụng các đối tượng để xây dựng thế giới
Để bắt đầu và kết thúc cho mọi mô tả thế giới ta sử dụng
END_DESIGN:
Mọi mô tả về các đối tượng trong thế giới được viết giữa hai đoạn trên
Module: Mỗi module cũng được bắt đầu bằng BEGIN_MODULE: tên
module, và kết thúc bằng END_MODULE: tên module Mọi mô tả thế giới phải
có một modul có tên là main, đây là điểm bắt đầu cho mỗi mô tả thế giới Ta có thể hiểu modul main như phương thức main trong ngôn ngữ C Có nghĩa là trong modul này sẽ tổ chức các đối tượng thành thế giới, còn các đối tượng lại được định nghĩa qua các modul khác
Polygon: Một đa giác được định nghĩa bao gồm các thành phần như
sau:
Trang 13Trong đó:
Polygon: Cho biết tên của đa giác
Orientation: Xác định hướng của đối tượng Nó có thể nhận các giá trị (top, bottom, front, side hoặc không xác định)
Color: Cho phép định nghĩa màu của đa giác theo hệ màu (RGB)
Bitmap: Tên của ảnh load lên đa giác nếu có nếu không nó nhận giá trị (NO_BITMAP)(ảnh load lên có thể là ảnh động)
Transparent: Cho phép ta loại bỏ bớt một số màu của ảnh load lên đa giác Nó có thể nhận các giá trị lớn hơn hoặc bằng -1 -1: Chấp nhận toàn bộ màu của ảnh 0: Bỏ đi đa số các màu thường xuyên được sử dụng nhất…n: Bỏ
đi các màu thường xuyên được sử dụng thứ n
Rotated: Có hai lựa chọn YES/NO Nếu yes thì phía trước của đa giác sẽ luôn hước về phía camera tạo cho ta cảm giác như đang nhìn một khối đa giác 3D chứ không phải nhìn một đa giác phẳng
Light Diminution: Cho phép xác định mức chịu ảnh hưởng của hiệu ứng khí quyển lên đa giác Như ta đã biết bất kỳ một hình gì trong không gian khi nhìn xa dần nó sẽ dần hoà vào màu của khí quyên (ví dụ màu sương mù vv ) Light Diminution là một thành phần cho phép xác định mức độ hoà vào khí quyển của đa giác Nó có thể nhận các giá trị lớn hơn hoặc bằng không Với giá trị 0 nó sẽ không chịu ảnh hưởng của bất kỷ hiệu ứng khí quyển nào
Trang 14Number of Pont: Trường này cho phép ta xác định số điểm của đa giác Sau đó ta phải cho biết toạ độ của từng điểm trong không gian 3 chiều mỗi điểm là một bộ ba (x,y,z) Chú ý các điểm này phải cùng nằm trên một mặt phẳng
Chú ý: Đối với Orientation (Hướng) trong chế độ Viewer orientation chỉ liên quan tới các đối tượng động Cong trong chế độ Editor tất cả các đa giác liên quan tới một nhóm vì vậy orientation rất quan trọng Nếu bạn muốn sử dụng các hàm quay, dịch chuyển của engine cẩn thiết phải biết hướng của nó
để hướng bể mặt của nó tới camera
Object: Một OBJECT được khai báo gồm các thành phần sau
Scale: Kích thước của đối tượng so với module được định nghĩa ví dụ (1
1 1) là tương đương với đối tượng được định nghĩa, (2,2,2) là kích thước gấp đôi đới tượng đã được định nghĩa
Matrix: Là một ma trận bốn chiều dùng cho các phép biến đổi
Trang 15Track: Track được định nghĩa đơn giản như sau:
Trong đó:
Track: Cung cấp tên của track ví dụ mytrack
Cyclic: Nhận hai giá trị Yes/No với YES: Track là một đường đóng còn NO: Nó là một đường không khép kín Sau Cyclic là một tập hợp các điểm toạ
độ mô tả đường của track
Dynamic Object : Một đối tượng động được định nghĩa như sau:
Trong đó:
Dynamic: Cho biết tên của đối tượng động
Module Name: Tên modul đối tượng
Type: Định nghĩa kiểu đối tượng như car hay plane vv , mặc định là regular
Control: Định nghĩa đối tượng điểu khiển đối tượng (Người hay máy)
Trang 16Track: Tên track mà đối tượng sẽ chuyển động theo track đó
Chase: Tên đối tượng mà đối tượng phải theo khi nó di chuyển
Chase Type: Mô tả kiểu di chuyển của đối tượng theo track hoặc theo một đối tượng khác, nó nhận các giá trị:
chase_track: Đối tượng di chuyển theo track
chase_track_airplane: Tương tự như trên nhưng kiểu di chuyển mô tả theo kiểu máy bay bay
chase_flexible: Đối tượng di chuyển mểm mại theo đối tượng mà nó bám theo
chase_location: Đối tượng chỉ thay đổi vị trí khi nó di chuyển mà không thay đổi hướng, sự di chuyển này là cứng nhắc không có sự mềm mại, uyển chuyển
chase_physics: Người sử dụng sẽ thiết lập một số thông số để xác định kiểu di chuyển của đối tượng
chase_precise: Đối tượng động di chuyển hệt như đối tượng mà nó di chuyển theo
no_chase: Đối tượng không di chuyển theo bất kỳ đối tượng nào
Chase Softnes: Là một số giữa 0 và 1, nó xác định cách mà đối tượng động sẽ rẽ số càng lớn thì cách đối tượng rẽ càng cứng nhắc, với số 0 vòng rẽ
sẽ trơn như trong thực tế
Chase Distance: Hướng giữa đối tượng động vói đối tượng mà nó bám theo
Physics: Chỉ liên quan khi chase type là chase_physics, ngoài ra nó còn liên quan tới kiểu chase_track hoặc chase_track_airplane vể mặt tốc độ
Trang 17Speed: Xác định vector tốc độ Hướng của vector là hướng của chuyển động, độ dài của vector điều khiển tốc độ di chuyển
Force: Là điều khiển của gió, hướng của vector này quyết định hướng của gió và độ lớn của vector quyết định tốc độ gió Nếu bạn mối biểu hiện lực tương tự lực hấp đẫn vector có dạng là [0, 0, -10] (Cùng chiều âm
của trục z)
Maximum Speed: Tốc độ tối đa mà đối tượng có thể di chuyển
Friction: Một số nhỏ hơn hặc bằng 1 0 : Không có chức năng 1: Vô hạn chúc năng , Vì thế mà không thể di chuyển Với số âm: Hành động như là thúc
ép khí nổ Nó có thể được sử dụng để tăng cường tốc đô –1 Gấm đôi tốc độ –
2 Gấp 3 tốc độ, nó cũng có thể sử dụng các số như 0.3 hay -0.3 vv
Elasticity: Ứng sử khi đối tượng chạm vào một đối tượng khác
1 - Đối tượng không mất tốc độ 0.5 - Tốc độ giảm một nửa
0 – Đối tượng dừng lại ở đó
Location: Vị trí của đối tượng
Scale: Kích cỡ của đối tượng so với modul
Camera: Như đã định nghiã ở phần trên camera là thành phần cho phép xác
định vị trí, góc nhình vào thế giới Nó được định nghĩa tương tự như sau:
Trang 18Trong đó:
Camera Name: Tên camera camera đầu tiên được nhìn thấy khi load thế giới là defaule camera
Location: Vị trí của camera
Direction: Hướng của camera
View Field: Góc nhì của camera Nó có thể nhận các giá trị từ 1 tới 179
độ Với với góc nhình càng nhỏ thì sẽ càng nhìn được ít đối tượng và các đối tượng nhìn thấy sẽ càng lớn và ngược lại
Culling Depth: -1 : Không có hiệu ứng Các giá trị khác (trong
khoảng [0,∞]), cắt thế giới Ví dụ nếu Culling Depth là 1000 camera không thể nhì thấy bất cứ thứ gì xa hơn 1000 đơn vị Điểu này làm cho công việc render nhanh hơn do phải vẽ ít, nhưng một cách tốt hơn hiệu ứng này là sử dụng hiệu ứng khí quyển (atmospheric effect) như hiệu ứng sương mù Khi có sương mù thì engine không phải vẽ các đối tượng ở xa
Eye Distance: Xác định khoảng cách mà camera bắt đầu nhìn (những đối tượng ở gần camera hơn khoảng cách này sẽ không được nhừn thấy) Khoảng cách này càng lớn càng nhìn đối tượng chính sác hơn nhưng lại không
Trang 19nhìn được những vật gần do đó việc lựa chọn khoàng cách này tuỳ thuộc vào từng trường hợp Khoảng cách thông thường là 1,4,10,20
Track: Là tên track mà camera sẽ di chuyển theo
Các thành phần: Chase, Chase Type, Chase Softness, Chase Distance, Physics, Speed, Force, Maximum Speed, Friction, Elasticity được sử dụng và có
ý nghĩa như đối với đối tượng
Animation: (Ảnh động) Mỗi một ảnh động được mô tả như sau:
Trong đó:
Animation: Cho biết tên của ảnh động
Number of frames: Cho biết số hình ảnh của ảnh động
Times: Thời gian dừng của mỗi hình (tính bằng 1/100 của giây) Thời gian này là bắt buộc phải có cho mỗi ảnh
Năm trường BACK, BACK-SIDED, SIDE, FRONT-SIDED, và FRONT là đại diện cho 5 góc nhình khác nhau của ảnh động Mỗi trường là một tập hợp các ảnh thường khi hoạt động các ảnh này sẽ liên tục thay thế nhau tạo ra một hình ảnh động liên tục Mỗi ảnh Còn xác định thêm một trường Transparency, trường này xác định màu trong suốt của ảnh Nó có thể nhận các giá trị: -1: Không có màu trong suốt, 0: Màu nhiều nhất trong ảnh sẽ trở thành màu trong suốt, 1: Màu nhiều thứ hai trở thành trong suốt vv
Background: Là nền của không gian, có thể định nghĩa nó như sau:
Trang 20Trong đó:
Background Name:Tên nền
Bitmap Name: Tên ảnh sử dụng làm nền
Distance: Chiều cao của nền trời, nếu nó càng lớn thì sự thay đổi của nền khi chiều cao của camera thay đổi càng thể hiện rõ hơn Nền di chuyên lên trên khi camera di chuyển lên trên, nó tạo cho ta cảm giác như nên trời trong thực tế
Bottom: Chiều cao tại nơi mà nền trời bắt đầu
Bottom ensity: Xác định độ mờ, độ tương phản của ảnh nền
ensity Step: Thành phần này được thêm vào để bổ trợ cho bitmap ensity,
nó xác định các số lượng các điểm màu được vẽ khi nền chịu ảnh hưởng của các hiệu ứng khí quyển
Atmosphere: Là các hiệu ứng khí quyển, nó được định nghĩa như sau:
Trong đó:
Atmosphere: Màu của hiệu ứng (được xác định theo (RGB))
Trang 21Fog: Trường này nhận bất kỳ giá trị nào nằm giữa 0 và 2 Số này xác định lượng sương mù trong thế giới Nếu khoảng cách của thế giới là nhỏ thì số này nên gần với 0 nếu khoảng cách này là lớn thì số này nên gần với 2
Light: Nhận bất kỳ giá trị nào trong khoản 0 tới 400 Số này xác định
độ sáng chói của thế giới
Chú ý: Với Background và Atmosphere chỉ định nghĩa một lần là dùng cho cả thế giới, nó được định nghĩa trước module main và không cần gọi ra ở bất cứ đâu
Ngoài các cấu trúc cho phép mô tả đối tượng như đã trình bầy trên thì định dạng wrd của morfit còn cho phép một số cấu trúc phức tạp khác và nó cũng cho viết chèn thêm các script vào để điều khiển đối tượng trong môi trường web
1.2.2.Điều khiển thế giới bằng Morfit
1.2.2.1Các vấn đề cơ sở
a Hệ toạ độ
Hệ trục toạ độ mà chúng ta quan tâm là hệ trục toạ độ 3D Xong để đơn giản chúng ta sẽ tìm hiểu các vấn đề trên hệ trục toạ độ 2D
Một hệ trục toạ độ hai chiều trên máy tính được morfit định nghĩa gồm hai trục
x, y trong đó trục x có phương thẳng đứng so với màn hình và trục y có phương nằm ngang trên màn hình Hướng dương của trục x là hướng từ dưới lên trên màn hình và nó được đại diện bằng vector chỉ hướng [0,1] chú ý vector này cũng có thể được viết dưới dạng [0,2] hay [0,3] vvv Hướng dương của trục y là hướng từ trái xang phải và nó cũng được đại diện bằng vector chỉ hướng [1,0]
Mô hình mô phỏng morfit cung cấp cho chúng ta 3 không gian toạ độ đó là: Không gian toạ độ thế giới Đây là không gian toạ độ bất biến nó không chịu ảnh hưởng của bất kỳ tác động nào của đối tượng hay camera Mọi đối tượng trong thế giới đều được đặt trong không gian toạ độ của thế giới Chúng
ta có thể cho các đối tượng chuyển động bằng cách thay đổi vị trí (toạ độ của nó) trong không gian toạ độ thế giới
Trang 22Không gian toạ độ đối tượng Đây không gian toạ độ gắn liền với đối tượng, nó sẽ dịch chuyển nếu dối tượng dịch chuyển và quay nếu đối tượng quay Việc đưa ra không gian toạ độ đối tượng sẽ đem lại rất nhiều tiện dụng cho người xây dựng hệ thống Ví dụ ta cần xây dựng một cảnh hoạt động trên một ô tô hay một máy bay nếu chỉ dùng một hệ trục toạ độ chúng ta sẽ phải tính toán các hoạt động của mọi người trên máy bay so với máy bay và tính toán hoạt động của máy bay so với trục toạ độ thế giới sau đó mới có thể tính được hoạt động của mọi người so với toạ độ thế giới, đây là một chuỗi công việc hết sức phức tap Nhưng bằng việc đưa vào hệ toạ độ đối tượng thì chúng ta chỉ cần tính toán các hoạt động của mọ người so với trục toạ độ của máy bay và hệ thống của morfit sẽ tự động chuyển đổi giữa các hệ toạ độ này Hình vẽ dưới đây là mô tả cho một hệ trục toạ độ 2D
Giả sử có một cái ô tô như trên hình vẽ nếu ô tô dịch chuyển dọc theo các trục toạ độ thì không có gì để nó nhưng nếu nó dịch chuyển không theo trục toạ độ giả sử hướng dịch chuyển của nó là [1,1] trên hệ toạ độ thế giới nhưng nếu ta gắn vào ô tô một trục toạ độ thì vector dịch chuyển của nó là [1,0] hoặc [0,1] nếu vector x của trục toạ ô tô là trong hệ toạ độ thế giới là [1,-1] hoặc [1,1]
Ngoài ra morfit còn cung cấp cho chúng ta một không gian toạ độ nữa là không gian toạ độ camera, tính chất của nó tương tự như với không gian toạ độ đối tượng có nghĩa là hệ toạ độ luôn gắn với camera khi nó dịch chuyển hoặc khi nó quay
Hệ trục toạ độ 3D
Trong không gian 3D các chúng ta cũng áp dụng các quy tắc hoàn toàn tương tự như trong không gian 2D Morfit sử dụng hệ trục toạ độ bàn tay phải
Trang 23có nghĩa hướng dương của vector x là hướng từ trong màn hình ra ngoài phía bạn và hướng âm là hướng ngược lại, nó có thể mô tả bởi các vector [1,0,0] hặc [2,0,0] và [-1,0,0] hặc [-2,0,0] Hướng dương của trục y là hướng từ trái xang phải màn hình, hướng dương của trục z là hướng từ dưới lên trên của màn hình
hệ toạ độ này được mô tả trong hình vẽ sau:
Như đã nói ở phần trên mối đối tượng hoặc mỗi camera trong morfit được gắn một trục toạ độ và nó luôn dịch chuyển và quay theo đối tượng Như vậy với hệ trục toạ độ 3D đối tượng chỉ dịch chuyển trên trục toạ độ của nó theo các hướng [1, 0 , 0] hoặc [-1 , 0 , 0 ] hoặc [0,1,0] hoặc [0,1,0] hặc [0,-1,0] hoặc [0 , 0, 1] hặc [0,0,-1]
Việc xây dựng thêm không gian đối tượng sẽ nảy sinh một vấn đề là làm thế noà để xác định một điểm có toạ độ x,y trong không gian thế giới có toạ độ
là bao nhiêu trong không gian đối tượng và ngược lại có nghĩa là làm thế nào để xác định một điểm có toạ độ x’,y’ trong không gian đối tượng sẽ có toạ độ là bao nhiêu trong không gian thế giới Chúng ta sẽ xem xét qua hình vẽ dưới đây
Trang 24Giả sử có một đối tượng mà không gian toạ độ của nó như trên hình vẽ
có nghĩa vị trí của không gian đối tượng trong không gian thế giới là [X0,Y0], vector chiều của nó là OO’ ta có thể biểu diễn vị trí tương đối giữa hai hệ toạ độ bằng vector OO’ Bây giời giả sử có một điểm A ta có thể biểu diễn toạ độ của
A trong không gian thế giới bằng vector OA, không gian đối tượng bằng vector O’A Ta thấy rằng OA OO' O'A và O'AOAOO' Như vậy có thể tính
được toạ độ của A trong không gian thế giới nếu biết được toạ độ của nó trong không gian đối tượng và biết được vị trí, hướng của không gian đối tượng thông qua vector cộng Đồng thời cũng sẽ xác định được toạ độ của nó trong không gian đối tượng nếu biết toạ độ của nó trong không gian thế giới thông qua
vector trừ
b Liên kết
Để thao tác với bất kỳ một đối tượng nào của morfit công việc trước tiên
là chúng ta phải xác định liên kết của đối tượng đó Mọi đối tượng, sự vật trong thế giới đều được xác định bằng một liên kết, như liên kết của camera, của hình ảnh, của đối tượng vv… Một liên kết thực chất là một biến có kiểu nguyên
không dấu được chứa trong một từ (WORD) Điều này cũng có nghĩa là không
có sự phân biệt giữa liên kết của camera với liên kết của đối tượng hay liên kết
Không gian thế giới
Không gian đối tượng
O
O’
A
Trang 25của một anh với liên kết của đối tượng vv… Và nếu bạn không xác định được liên kết của đối tượng khi sử dụng các hàm thao tác với đối tượng hay bạn lấy liên kết của một đối tượng này cho đối tượng khác thì chương trình dịch sẽ báo
nỗ ngoại lệ
Mofit cung cấp cho chúng ta một số hàm cho phép lấy ra các liên kết từ thế giới như _camera_get_fist_camera(), _object_get_first_object() vv , nó cũng cung cấp cho chúng ta các hàm kiểm tra biến liên kết ví như
_object_is_object() vv chi tiết các hàm cho từng đối tượng sẽ được trình bầy
kỹ hơn ở những phần sau
c Tổng quan về các hàm của morfit
Mô hình Morfit cung cấp cho chúng ta một tập hợp các hàm API khá hoàn chỉnh để chúng ta có thể thao tác, xử lý với mọi hành động tương tự như các hành động trong thế giới thực Chúng ta có thể phần loại chúng thành các nhóm hàm API như sau:
Các API đối tượng dùng để điều khiển mọi hoạt động, tính chất của đối tượng trong thế giới Các đối tượng đã tồn tại như nhà cửa, xe cộ, cây cối vv , bạn có thể tạo mới bất kỳ loại đối tượng nào bằng các sử dụng một số công cụ soan thảo như World Builder Bạn cũng có thể tạo mới đối tượng, huỷ đối tượng, dịch chuyển và quay đối tượng hoặc thay đổi hình dạng của đối tượng hay load ảnh động lên đối tượng vv Ngoài ra morfit còn cung cấp các API cho phép phát hiện sự va chạm giữa các đối tượng
Các API camera: Các API này cung cấp cho chúng ta các chức năng, hàm
để điều khiển mọi thuộc tính của camera như vị trí, góc quay, không gian hay các các hàm thao tác với track vv
Các API của nhóm: Chúng cho phép kết nối một số các đa giác cơ bản thành một nhóm và thao tác với nhóm đó như thao tác với một đối tượng đơn ví
dụ ta có thể thay đổi vị trí của nhóm, hay quay cả nhóm vv
Các API hình ảnh: Cung cấp các phương thức thao tác với các hình ảnh như lấy ảnh từ bộ phận nhớ, load ảnh lên các object vvv…
Trang 26Các API ảnh động: Là các phương thức cho phép tạo ra ảnh động từ các ảnh rời rạc, và cho phép load nó lên các đa giác Ngoài ra nó còn có thể sử dụng
để tạo ra các hiệu ứng ví dụ như tuyết, bóng của người đang chạy vv
Các API đa giác: Cho phép ta tạo, và thao tác với các đa giác như thay đổi
số đỉnh, thay đổi nét tô đa giác, load hình ành lên đa giác vv
Các API engine : Là những phương thức cho phép tác động đến toàn bộ thế giới như load thế giới, thay đổi độ phân giải của thế giới, thay đổi chất lượng hiển thị các hình ảnh của thế giới vv
Các API khác: Các API này bao gồm các API cho phép thao tác với phần cứng như các thiết bị vào ra, card đồ hoạ vv Các API cho phép xử lý nền API
xử
lý track vv
1.2.2.2.Đối tượng
Đối tượng là một sự vật cụ thể nào đó ví dụ như cái bàn, tường, sàn, cửa
sổ vv, như đã định nghĩa trong phần trên đối tượng gồm hai loại đối tượng đó là (dynamic object) và (static object) Morfit cung cấp cho chúng ta một các API khá đơn giản và dễ hiểu để thao tác với đối tượng phần dưới đây sẽ giới thiệu các API này
Morfit cung cấp cho chúng ta hai chế độ để load thế giới đó là chế độ (View mode) và chế độ (Editor mode) Với chế độ (view mode) sẽ có một số lượng lớn các cấu trúc dữ liệu của đối tượng được tạo vì thế các thao tác với thế giới sẽ rất nhanh, nhưng các đối tượng tĩnh (static object) sẽ luôn là cố định không thể tác động được lên chúng Còn trong chế độ editor mode các cấu trúc này sẽ không được tạo do đó tất cả các đối tượng đều có thể thay đổi được Chúng ta sẽ nghiên cứu kỹ hơn vể các chế độ này trong phần sau
a Các phương thức truy cập đối tượng
Như chúng ta biết muốn thao tác với bất kỳ đối tượng nào trong thế giới chúng
ta phải biết liên kết (handle) của nó Ta có thể lấy liên kết này bằng một số hàm sau:
Trang 27STATE_object_is_object( handle, string function_asking)
Trong đó handle là handle của đối tượng và function_asking là chuỗi thông báo của cửa sổ Messagebox sẽ hiện ra nếu handle đó không tồn tại, chuỗi
là NULL thì cửa sổ sẽ không hiển thị Hàm này sẽ trả vể giá trị 0 nếu handle không tồn tại ngược lại (>0) nếu nó tồn tại
b Các thao tác với vị trí của đối tượng trong thế giới
Có bốn các để điều khiển các đối tượng trong thế giới Thứ nhất bạn có thể điều khiển trực tiếp bằng cách xác định vị trí, hướng của đối tượng Thứ hai bạn có thể gắn đối tượng vào một (track) đã được định nghĩa Thứ ba bạn có thể gắng đối tượng đó theo một đối tượng nào đó Cuối cùng bạn có thể định nghĩa tính chất vật lý của đối tượng và đối tượng sẽ tự hoạt đông theo quy luật vật lý
Điều khiển trực tiếp đối tượng: Đây là các điều khiển cơ bản của đối tượng
trong thế giới
Hàm cơ bản nhất là hàn thiết lập vị trí tuyệt đối cho đối tượng
STATE_object_set_location( object_hand, x,y,z) và hàm thiết lập hướng cho đối tượng STATE_object_set_direction( object_hand, x,y,z) Tương ứng với các hàm thiết lập cũng có các hàm cho phép lấy ra vị trí hiện tại và hướng hiện tại của đối tượng đó là STATE_object_get_location(object_hand , x ,y ,z ) và
Trang 28STATE_object_get_direction(object_hand, x,y,z) Chúng ta cũng có thể thay đổi vị trí tương đối của đối tượng so với vị trí cũ bằng các hàm
STATE_object_move( m_ObjectHandle , space_flag , X, Y, Z)
STATE_object_rotate( m_ObjectHandle , space_flag , X, Y, Z) vv trong đó space_flag là không gian mà đối tượng sẽ dịch chuyển nó có thể là không gian thế giới hoặc không gian đối tượng vv…
Dịch chuyển đối tượng theo một track đã được định nghĩa:
Trong trường hợp chúng ta cần dịch chuyển đối tượng luôn theo một đường
cố định ta sử dụng phương thức dịch chuyển đối tượng theo (track) Track có thể được tạo sẵn trong thế giới hoặc cũng có thể được tạo bằng chương trình của chính bạn Để gán một đối tượng vào một track ta cần biết handle của đố tượng
Dịch chuyển theo một đối tượng hay một camera (chasing object):
Để dịch chuyển đối tượng một cách tự động ngoài cách đặt đối tượng vào một track ta có thể gắn đối tượng theo sự chuyển động của một đối tượng khác Bất kỳ một đối tượng động nào cũng có khả năng chuyển động theo một đối tượng động khác Có bốn đặc tính ảnh hưởng tới sự chuyển động theo của đối tương đó là:
Đối tượng mà đối tượng theo (Charsed object) Đối tượng này có thể là một đối tượng động khác hoăc một camera hoặc một nhóm Để thiết lập đố tượng theo ta sử dụng hàm:
Trang 29STATE_object_set_object_to_chase(object_handle,object_to_chase_handle) trong đó bject_to_chase_handle là đối tượng bị theo Và hàm
STATE_object_set_camera_to_chase(object_handle, camera_to_chase_handle) nếu đối tượng bị theo là camera hay
STATE_object_set_group_to_chase(object_handle, camera_to_chase_handle) nếu đối tượng bị theo là một nhóm (group) Tương ứng nếu chase được thiết lập
ta cũng có thể lấy ra đối tượng đang bị theo bằng các hàm lấy sau:
Khoảng cách theo(chase offset) Chase offset xác định khoảng cách
từ đối tượng theo đến đối tượng bị theo Ví dụ char offset là [0,0,10] có nghĩa đối
tượng theo sẽ theo đối tượng nhưng nó sẽ ở bên trên đối tượng
cách đối tượng 10 đơn vị Ta có thể thiết lập char offset bằng hàm:
Trang 30theo sẽ chuyển động trên một đường x’ // với đường x và khi đối tượng bị theo quay thì đối tượng theo cũng sẽ quay một góc như đối tượng bị theo quay Nếu chase type là location thì sự chuyển động của đối tượng theo sẽ tương tự như với chase type là precise, nhưng đối tượng theo sẽ không quay khi đối tượng bị theo quay Khi chase type là flexible thì đối tượng theo sẽ có sự linh động và khả năng tự do hơn so với hai giá trị trên Nó sẽ không chuyển động một cách cứng nhắc như đối tượng bị theo mà các đường chuển động của nó sẽ mềm mại
và uyển chuyển hơn Chúng ta có thể thiết lập kiểu theo cho đối tượng bằng hàm:
STATE_object_set_chase_type(Handle,chase_type)
Với các giá trị tương ứng của chase_type là CHASE_PRECISE,
CHASE_LOCATION, CHASE_FLEXIBLE, và NO_CHASE NO_CHASE được sử dụng khi bạn muốn dừng sự bám theo của đối tượng Tương ứng cũng
có hàm lấy ra chase_type là STATE_object_set_chase_type
Với kiều theo là flexible ta có thể thiết lập độ mềm dèo của đường rẽ bằng hàm STATE_object_set_chase_softness(object_handle,softness) và tương tự có hàm lấy sự mềm dẻo hiên tại của đối tượng theo Giá trị softness nằm trong khoảng [0-1]
Chuyển động theo quy luật vật lý Physics:
Chúng ta có thể thiết lập một số đặc tính vật lý cho đối tượng, từ đó engine sẽ tự động tính toán chuyển động của đối tượng trong môi trường Để khởi tạo cho một đối tượng hoạt động theo quy luật vật lý bạn thiết lập chase type cho đối tượng đó là CHASE_PHYSICS Để dừng hoạt động của đối tượng theo quy luật vật lý ta thiết lập chase type là NO_CHASE
Chúng ta có thể thiết lập vận tốc chuyển động của đối tượng bằng một vector [x,y,z], vector này sẽ xác định cả vận gía trị vận tốc và hướng chuyển động của đối tượng Ví dụ ta khi ta khởi tạo vector vận tốc là [10,0,10] thì đối tượng sẽ chuyển động lên trên và hướng vào trong màn hình Chúng ta sẽ có hai cách để thiết lập vận tốc cho đối tượng Cách thức nhất là ta chỉ thiết lập vector vân tốc và giá trị của vector này sẽ xác định tốc độ chuyển động của đối tượng:
Trang 31speed[3]={10 0 10}
STATE_object_set_speed(objecthand, speed)
Cách thứ hai là ta sẽ xác định vector hướng chuyển động của đối tượng
và xác định tốc độ chuyển động tuyệt đối của đối tượng
Ngoài việc thiết lập vận tốc chuyển động cho đối tượng bạn có thể thiết lập một số thuộc tính vật lý khác của đối tượng Bạn có thể sử dụng hàm STATE_object_set_max_speed để giới hạn tốc độ chuyển động tối đa cho đối tượng Và hàm STATE_object_set_force để giả lực hấp dẫn (rơi tự do) cho đối tượng vv…
c Phát hiện sự va chạm giữa các đối tượng
Phát hiện và xử lý va trạm là một công việc hết sức quan trong trong hệ thống thực tại ảo và trong cả các hệ thống 3D game Morfit làm cho công viêc này trở nên vô cùng đơn giản và hiệu quả Để phát hiện sự va chạm ta sử dụng hàm STATE_object_is_movement_possible() với các tham số đầu vào là điểm bắt đầu và điểm kết thúc của một đường thẳng và nó sẽ trả lại giá trị true nếu đường thẳng đó chạm vào một đối tượng và false nếu không chạm vào đối tượng nào Cấu trúc hàm sử dụng như sau:
STATE_object_is_movement_possible(object_handle ,start_location[3]
,end_location[3], *ersected_polygon, ersection[3], *blocking_object)
Đôi khi bạn muốn đối tượng chuyển động qua một đối tượng khác mà không phát hiện ra sự va chạm ví dụ như khi một máy bay chuyển động xuyên
Trang 32qua một đám mây Bạn có thể làm được điều này bằng cách sử dụng hàm Morfit_object_make_non_collisional( CloudHandle )
d Một số hàm tiện ích cho đối tượng
Morfit cung cấp cho chúng ta một số lượng khá phong phú các hàm tiện ích phần dưới đây sẽ giới thiệu một số hàm tiện ích cho đối tượng
Nhân đôi đối tượng: Bằng cách sử dụng hàm Morfit_object_duplicate() bạn có thể tạo một bản thể đối tượng mới Điều này vô cùng tiện dụng trong khi bạn muốn tạo ra nhiều đối tượng cùng loại
Cho phép và không cho phép đối tượng: Đôi khi bạn muốn tạm thời đối tượng không xuất hiện trong thế giới bạn có thể không cho phép đối tượng bằng cách sử dụng Morfit_object_disable(object_handle) Hoặc hiển thị lại đối tượng
đã bị giấu bằng các sử dụng Morfit_object_enable(object_handl)
Thời gian kết thúc: Là thời gian mà bạn muốn huỷ hoăc giấu đối tượng ví dụ khi ô tô đi qua một vũng bùn bùn sẽ bám lên ô tô, và bạn muốn sau một thời gian thì lượng bùn bám trên ô tô sẽ biến mất, bạn có thể thiết lập cho bùn một
Bạn có thể dừng tác dụng của hàm trên bằng cách gọi hàm trên với
time_in_milliseconds=0 Chú ý bạn nên gán object_handle bằng NULL sau khi gọi hàm này với hành động huỷ (MORFIT_DELETE)
Rơi từ track (Falling from a track): Thế giới bạn tạo thông thường là không bằng phẳng do đó công việc tạo một track nằm trên bề mặt thế giới là không thể xong bạn lại muốn đối tượng chuyển động theo một track trên bề mặt của thế giới Để làm được điều này bạn có thể tạo trước một track (có thể nằm trên bề
Trang 33mặt hoặc bất kỳ vị trí nào trong không gian) gắn đối tượng vào track sau đó bạn cho đối tượng rơi từ track xuống nền bằng hàm:
Morfit_object_set_falling_from_track(object_handle,height_above_ground, fall_through_dynamic_objects) Đối tượng sẽ rơi trên bề mặt của nền cách nền một khoảng height_above_ground Khi fall_through_dynamic_objects là YES thì đối tượng sẽ bỏ qua các đối tượng động bên dưới nó nhưng nó vẫn tính đến các đối tượng tĩnh (như toà nhà hay mặt đất vv ) Khi tham số
fall_through_dynamic_objects là NO thì nó sẽ tính đối tượng đầu tiên mà nó gặp
1.3 Tổng quan về particle trong thực tại ảo
Trong VR thì các hiệu ứng 3D đóng một vai trò rất quan trọng trong việc xây dựng các mô hình thế giới thực, trong đó các hiệu ứng của các particle (các phần tử) đóng một vai trò không thể thiếu, không thể thiếu vì hai lý do: thứ nhất như chúng ta đã biết mọi chất liệu trong thế giới thực đều được cấu tạo từ các particle (các phần tử) Làm việc với các chất liệu chính là làm việc với các particle; thứ hai chỉ có bằng cách tiếp cận particle mới có thể đáp ứng để làm việc với các kỹ thuật hết sức phức tạp khi mô tả những chất liệu trong thế gới thực Chỉ với hai lý do trên thôi đã cho thấy được vai trò vô cùng quan trọng không thể thiếu của các particle trong thực tại ảo Chính vì vậy mà chúng ta cần phải đi tìm hiểu và nghiên cứu về các particle và các hiệu ứng của nó trong môi trường thưc tại ảo Hiện nay các hiệu ứng của particle được sử dụng rất phổ biến trong các ứng dụng mô phỏng thế giới thực của thực tại ảo Ví dụ như : Chúng ta muốn mô tả một bầu trời có nhiều sao hay mô phỏng một vật thể phát quang hoặc mô phỏng một chùm bong bóng được tung ra liên tiếp…vv Để giải quyết những yêu cầu đó một cách hoàn hảo nhất thì chỉ có thể là “Hiệu ứng particle”
1.3.1 Particle trong thực tại ảo là gì?
Particle trong thực tại ảo chính là các phần tử hay còn gọi là các hạt, là thành phần cấu tạo lên các chất liệu trong thế giới Chúng ta có thể tạo ra các hạt đơn hoặc hàng triệu hạt để thể hiện cho một chất liệu nào đó trong thực tại
ảo Các hạt này mang cùng một tính chất, chính là tính chất của chất liêu mà nó
Trang 34mô phỏng Phần tử (particle) ở đây chúng ta không hiểu theo nghĩa vật lý mà chúng ta hiểu phần tử (particle) ở đây là ở mức mô phỏng mà mắt người có thể nhìn thấy và điều khiển chúng Ví dụ như chúng ta muốn mô phỏng một khối nước bằng các particle, thì particle ở đây không phải là một phần tử nước theo nghĩa vật lý mà chính là các giọt nước
1.3.2 Hiệu ứng particle trong thực tại ảo
Hiệu ứng particle ở đây chúng ta hiểu nó là việc sử dụng rất nhiều các particle (phần tử) có thể là giống hoặc khác nhau, chúng ta có thể thiết lập, thay đổi màu sắc, tính chất, kích thước, vận tốc…cho các particle (phần tử) và cho chúng chuyển động tự nhiên hoặc tuân theo một quy luật nào đó để tạo thành các hiệu ứng 3D trong môi trường thực tại ảo Các hiệu ứng particle được tạo ra
có thể nhằm mục đính thể hiện một tính chất nào đó của một chất liệu cụ thể hoặc cũng có thể để thể hiện một hiện tượng tự nhiên nào đó trong môi trường thực tại ảo Ví dụ chúng ta có thể sử dụng các particle (phần tử) nước để tạo thành một hiệu ứng thể hiện cho tính nhớt của nước trong môi trường thực tại
ảo, hoặc chúng ta có thể kết hợp các hiệu ứng của nước, của gió và ánh sáng để tạo nên một cơn bão …
1.3.3 Cơ sở mô phỏng hiệu ứng các particle
Cơ sở kỹ thuật của mô phỏng hiệu ứng particle chính là dựa vào các tính chất vật lý của các particle Dưới đây em xin trình bày một số tính chất vật lý cơ bản của các particle
Particle đóng vai trò là thành phần cấu tạo nên các chất liệu hay vật chất của thế giới thực Nhưng trong báo cáo này tác giả trình bày một cách tiếp cận hoàn toàn mới về particle Particle trong báo cáo này không những đóng vai trò cấu tạo nên các chất liệu, mà còn đóng vai trò tạo nên các hiệu ứng hạt 3D trong môi trường thực tại ảo Dưới đây tác giả xin trình bày một số tính chất cơ bản của các particle:
Trang 35ta để có thể tạo nên một hiệu ứng
1.3.3.2 Chịu áp đặt của lực hấp dẫn giữa các particle khác
Đây cũng là một tính chất vật lý rất phổ biến không chỉ với các particle,
mà còn rất phổ biến với vạn vật trên thế giới Tính chất này được áp đặt vào các particle sẽ làm cho sự chuyển động của các particle thêm phần thực tế và hấp dẫn hơn Nhờ có tính chất này mà các hạt có thể thể chuyển động xung quanh một hạt trung tâm hoặc chuyển động lôi cuốn theo nhau, hoặc cũng có thể chuyển động tản mạn ra tứ phía tùy thuộc vào giá trị mà chúng ta thiết lập cho tính chất này
1.3.3.3 Chịu áp đặt của lực ma sát và lực đàn hồi
Đây là hai tính chất rất cũng rất quan trọng trong việc xử lý va chạm giữa các particle với các particle hoặc của các particle với các đối tượng khác trong thế giới Hai lực này quyết định xem sau khi các particle va chạm vào nhau hoặc va chạm vào các đối tượng khác thì chúng chuyển động như thế nào và tốc
độ sau va chạm thay đổi ra sao? Hai tính chất này góp phần làm tăng thêm tính
thực cho các particle trong quá trình chuyển động
1.3.3.4 Thới gian tồn tại của các particle
Thời gian tồn tại của các particle chình là khoảng thời gian từ lúc particle được phát ra cho tới khi các particle hoàn toàn tan biến vào không gian Khoảng thời gian này rất quan trọng nó thể hiện tất cả những biến đổi của các particle như: màu sắc, tốc độ, kích thước, hướng chuyển động…Tùy thuộc vào từng
Trang 36hiệu ứng cụ thể mà chúng ta co thể thiêt lập khoảng thời gian này là dài hay ngắn
1.3.3.5 Vận tốc của các particle
Vận tốc các particle quyết định tốc độ chuyển động của các particle trong không gian Vận tốc các particle góp phần làm cho người quan sát có thể thấy được sự va chạm giữa các particle, thấy được các lực như: lực đàn hồi Vận tốc này nhanh hay chậm là phụ thuộc vào từng particle và từng hiệu ứng cụ thể
Ví dụ như khi chúng ta mô phỏng một đám mây bay thì đương nhiên tốc
độ của các particle phải nhỏ, còn khi chúng ta mô phỏng một loạt đạn được bắn
ra thì tốc độ của các particle là phải rất cao
1.3.3.6 Hướng chuyển động của các particle
Hướng chuyển động của các particle chính là hướng chuyển động của các particle trong không gian; lên trên, xuống dưới hay sang trái, sang phải Hướng chuyển động của các particle ngoài việc thể hiện sự chuyển động tự
nhiên của các particle thì nó còn mang theo ý tưởng của tác giả
1.3.3.7 Kích thước của các particle
Kích thước của các particle đóng vai trò quan trọng thể hiện sự biên đổi của các particle theo thời gian trong từng hiệu ứng cụ thể
Ví dụ như một particle ở rất xa thì chúng phải có kích thước nhỏ và càng đến gần thì càng lớn dần lớn dần
1.3.3.8 màu sắc của các particle
Màu sắc các particle đóng một vai trò hết sức quan trọng trong việc thể hiện các particle theo không gian và thời gian Có thẻ nói một hiệu ứng particle
Trang 37mà thiếu yếu tố màu sắc thì không thể tạo nên một hiệu ứng hoàn chỉnh Màu sắc cũng góp phần quan trọng thể hiện sự biến đổi của các particle theo thời gian
1.3.4 Các vấn đề gặp phải trong quá trình tìm hiểu và nghiên cứu
Thực tại ảo là một lĩnh vực khá mới mẻ đối với Việt nam chúng ta nói chung và bản thân tác giả bản báo cáo này nói riêng Chính vì vậy mà trong quá trình tìm hiểu, nghiên cứu và cài đặt tác giả đã gặp phải rất nhiều khó khăn, đặc biệt là nguồn tài liệu tham khảo
Particle là một khái niệm tương đối rộng vì vậy mà nó đòi hỏi một khối lượng kiến thức rất lớn đối với những người muốn tìm hiểu và nghiên cứu particle
Particle mô phỏng chất liệu mà particle đó tạo nên, vì thế chúng ta muốn tạo ra một hiệu ứng để mô phỏng một tính chất cụ thể của chất liệu nào thì trước tiên chúng ta phải tạo ra được particle tương ứng với chất liệu đó Mà việc tạo
ra một particle 3D động tương ứng với một chất liệu là một vấn đề hết sức khó khăn và phức tạp, tiêu tồn nhiều thời gian và công sức của người lập trình
1.3.5 Hướng giải quyết
Tìm hiểu dựa trên nhưng tài liệu có liên quan tới thực tại ảo và particle Tài liệu cụ thể sẽ được tác giả chỉ dẫn cụ thể ở phần sau
Tìm hiểu tính chất của một số chất liệu nói chung và của các particle nói riêng, tính chất ở đây chủ yếu là tính chất vật lý
Có thể sử dụng các ảnh của các particle thay cho các particle 3D động Đây là một giải pháp có thể nói là cũng rất hiệu quả và tiết kiệm thời gian
CHƯƠNG II
KỸ THUẬT MÔ PHỎNG
Trang 382.1 Đặt vấn đề
Để tạo nên một hiệu ứng 3D sử dụng các particle thì phải cần rất nhiều particle kết hợp với nhau, các particle có thể có tính chất giống hoặc khác nhau Các particle được biểu diễn bằng chất liệu của chất liệu mà chúng ta mô phỏng Các particle có thể được mô phỏng bằng các đối tượng 3D hoặc 2D, nhưng khó khăn mà chúng ta gặp phải là; để tạo ra một particle 3D động mất rất nhiều thời gian và độ phức tạp cũng rất cao Một cách giải quyết rất tốt có thể khắc phục được hai khó khăn trên là; chúng ta có thể sử dụng các ảnh có sẵn, chính là ảnh của các particle cần biểu diễn để thay thế cho một đối tượng particle 3D động
Ví dụ: chúng ta muốn tạo ra một hiệu ứng về các quả bóng thì các particle chính được tạo ra từ ảnh của một quả bóng
Ảnh một particle
Còn đây là hiệu ứng sau khi đã coi ảnh trên là một particle và sử dụng một số
kỹ thuật cho các particle:
Trang 39Một câu hỏi đặt ra là; làm sao để có thể tạo nên được một hiệu ứng của các particle mà đầu vào chỉ là các ảnh? Phần tiếp theo dưới đây sẽ trả lời câu hỏi này
2.2 Kỹ thuật mô phỏng
Việc tạo nên được một hiệu ứng cho các particle là một công việc hết sức phức tạp, nó đòi hỏi rất nhiều kỹ thuật của người mô phỏng Trong báo cáo này tác giả xin trình bày một phương pháp mô phỏng các hiệu ứng của các particle dựa trên các kỹ thuật xử lý và mô phỏng ảnh của các particle Để có thể mô phỏng được các hiệu ứng của các particle, chúng ta đi tìm hiểu và nghiên cứu ba thuật toán quan trọng sau:
Tạo ra một particle mới
Khởi động các particle mới
Cập nhật một particle
Việc tạo ra một particle mới là một công đoạn vô cùng quan trọng trong việc mô phỏng các hiệu ứng của các particle Tạo ra một particle tức là tạo ra một đối tượng động của particle đó Chúng ta có thể tạo ra một particle đơn hoặc một hệ thống các particle giống nhau tùy thuộc vào mục đích mô phỏng Khởi động một particle chính là việc cho particle đó bắt đầu hoạt động, việc hoạt động của một particle có thể là tự nhiên hoặc cũng có thể tuân theo một quy luật nào đó
Cập nhật một particle chính là việc thiết lập lại các thông số như: Màu sắc, tốc độ, kích thước, vị trí… đây là một quá trình không thể thiếu đối với những hiệu ứng có thời gian hoạt động dài
Bây giờ chúng ta sẽ đi vào tìm hiểu và nghiên cứu từng thuật toán cụ thể một Tất cả các thuật toán này đều được minh họa bằng ngôn ngữ Virtual C++ kết hợp với Morfit 3D
2.2.1 Tạo ra một particle mới
Để tạo ra được một particle động 3D là một vấn đề hết sức khó khăn và phức tạp, tiêu tốn rất nhiều thời gian Báo cáo này đưa ra một phương pháp rất
Trang 40đơn giản và hiệu quả; đó là chúng ta sử dụng một thuật toán để thay vì phải thiết
kế từng particle cho từng chất liệu cụ thể mỗi khi muốn mô phỏng một hiệu ứng cho một chất liệu nào đó, chúng ta hãy xử dụng ảnh của particle đó để mô phỏng Để có thể làm được điều này chúng ta đi giải quyết từng vấn đề cụ thể sau:
2.2.1.1 Tao ra một đa giác vuông
Lý do phải tạo ra một đa giác vuông rất đơn giản là vì một particle chình
là một đa giác vuông, hơn nữa các particle của chúng ta không phải là một đối tượng 3D động cho nên việc tạo ra một đa giác vuông để kết hợp với các ảnh của các particle là rất cần thiết không thể thiếu
Một đa giác vuông sẽ được minh họa như sau:
// 1* -*2
// | s | // | < > C | // | | | // | | s | // | | |
// 4 * -* 3
// c = vị trí trung tâm // s = kích thước // 1 = điểm trên bên trái // 2 = điểm trên bên phải // 3 = điểm dưới bên phải // 4 = điểm dưới bên trái
Vị trí của một particle sẽ được thiết lập tại vị trí trung tâm(C) Ta tiến hành thiết lập các tọa độ cho 4 điểm trên và thêm chúng vào một đa giác như hình trên theo chiều kim đồng hồ
Chúng ta thiết lập vị trí cho 4 điểm như sau: