1. Trang chủ
  2. » Luận Văn - Báo Cáo

MÔ PHỎNG HÀNH ĐỘNG NHÂN VẬT TRONG XÂY DỰNG MÔ HÌNH 3D

77 467 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 77
Dung lượng 1,86 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 1

MỤC LỤC

MỤC LỤC 1

LỜI GIỚI THIỆU 2

CHƯƠNG I 3

TỔNG QUAN VỀ THỰC TẠI ẢO VÀ 3D ANIMATION 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 Hành động của nhân vật (3D Animation) trong thực tại ảo 9

1.2.1 Animation trong thực tại ảo là gì? 10

1.2.2 Hiệu ứng Animation trong thực tại ảo 10

1.2.3 Cơ sở mô phỏng 3D Animation 11

1.2.4 Các vấn đề gặp phải trong quá trình nghiên cứu 13

1.2.5 Hướng giải quyết 14

CHƯƠNG II 15

KỸ THUẬT MÔ PHỎNG 15

2.1 Đặt vấn đề 15

2.2 Kỹ thuật mô phỏng 15

2.2.1 Khởi tạo nhân vật và trang phục 15

2.2.2 Điều khiển mô phỏng các trạng thái hành động của nhân vật 23

2.2.3 Các vấn đề liên quan tới camera và các phím điều khiển 39

CHƯƠNG III 49

CHƯƠNG TRÌNH MÔ PHỎNG 49

3.1 Bài toán 49

3.2 Mục đích và yêu cầu bài toán 49

3.3 Phương pháp giải quyết bài toán 49

3.4 Một số kết quả bài toán 50

KẾT LUẬN 55

HƯỚNG PHÁT TRIỂN ĐỀ TÀI 56

PHỤ LỤC 57

TÀI LIỆU THAM KHẢO 77

Trang 2

LỜI GIỚI THIỆU

Trong những năm gần đây công nghệ thông tin đã đạt được những bước phát triển nhảy vọt cả về phần cứng lẫn phần mềm 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à đợt làm đồ án tốt nghiệp này, dưới sự hướng dẫn và giúp đỡ của 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 hành động nhân vật trong xây dựng mô hình 3D”

Trang 3

CHƯƠNG I TỔNG QUAN VỀ THỰC TẠI ẢO VÀ 3D ANIMATION

TRONG THỰC TẠI ẢO

1.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 tạ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

Trang 4

ý 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 5

a 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

b 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ò chơ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

Trang 6

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 2 - Ứng dụng Thực tại ảo trong lĩnh vực giải trí

c 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 hồ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…

Trang 7

Hình 3 – 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 nghiệ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

Trang 8

d 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 4 - 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

tự 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

Trang 9

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 dị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 bị vào ra

1.2 Hành động của nhân vật (3D Animation) 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 hành động của các đối tượng đóng một vai trò không thể thiếu Không thể thiếu bởi vì một đối tượng sẽ

Trang 10

không tạo lên sự tương tác của nó với các đối tượng khác trong không gian thế giới nếu như nó không di chuyển hay thay đổi “trạng thái” (chính là các hiệu ứng) tại vị trí của nó Như vậy sẽ tạo ra cảm giác nhàm chán cho người xem, cũng như làm cho không gian thế giới ảo không được linh động, không có “sức sống”, mà nó sẽ làm người xem nhầm tưởng như đang coi một bức ảnh với những cảnh vật tĩnh Vì vậy mà có thể nói không một đối tượng, sự vật nào trong thế giới là không liên quan đến sự hành động Ở đây có thể ví dụ như : Một cây chịu sức thổi của gió sẽ nghiêng ngả theo chiều gió, một người chạy bộ trên đường với những đoạn đường khúc khủy, lên dốc hay xuống dốc thì lúc đó cũng

sẽ thấy rõ được sự thay đổi về vận tốc… Nhận thấy tầm quan trọng không thể thiếu đó mà chúng ta càng phải nghiên cứu và tìm hiểu mô phỏng các hiệu ứng hành động của các đối tượng trong môi trường thực tại ảo Hiện nay có rất nhiều hiệu ứng khác nhau về đối tượng mà ở đây tác giả chọn việc mô phỏng hành động của nhân vật (3D Animation) trong môi trường không gian ảo để phân tích

và mô phỏng

1.2.1 Animation trong thực tại ảo là gì?

- Animation: Thực chất là một tập hợp các hình ảnh có thứ tự được khởi

động 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 tivi v.v Hay nói cách khác, nó là một chuỗi có thứ tự của những hình ảnh thay thế nhau, tạo ra các hiệu ứng về sự vận động

- 3D Animation: Là sự kết hợp các hiệu ứng của các Animaition để tạo

ra các hành động của đối tượng trở nên mềm mại, uyển chuyển trong quá trình chuyển động cũng như có sự thay đổi về trạng thái trong môi trường không gian 3D

1.2.2 Hiệu ứng Animation trong thực tại ảo

Hiệu ứng Animation ở đây chúng ta hiểu nó là việc sử dụng rất nhiều các

cử chỉ, hành động có thể là giống hoặc khác nhau, chúng ta có thể thiết lập, thay đổi trang phục, tính chất, kích thước, vận tốc…cho các animation (đối tượng) 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 animation được tạo

Trang 11

ra nhằm miêu tả các động tác vận động hay cử chỉ của đối tượng mà ở đây đồ án

đề cập cụ thể lên một nhân vật Ví dụ: Một người chạy bộ trên một con đường có những đoạn dốc, khi người chạy lên dốc thì tốc độ sẽ chậm lại, còn khi chạy xuống dốc tốc độ sẽ giảm, hoặc thể hiện bằng nhịp thở nhanh hay chậm khi nhân

vật di chuyển…

1.2.3 Cơ sở mô phỏng 3D Animation

Cơ sở kỹ thuật của mô phỏng hiệu ứng 3D Animation chính là dựa vào các tính chất vật lý và sự tương tác của các đối tượng trong không gian thế giới Dưới đây tác giả xin trình bày một số tính chất vật lý cơ bản của hiệu ứng 3D Animaiton đối với một nhân vật cụ thể Ở đây sẽ lấy mô hình một nhân vật đang chạy trên một đoạn đường và thực hiện các động tác khác nhau Một số tính chất vật lý cơ bản sau:

a Chịu áp đặt của trọng lực

Đây là một tính chất hết sức quan trọng, nhờ có tính chất này mà nhân vật

sẽ nên hiện thực hơn Tính chất này làm cho nhân vật luôn có xu hướng chuyển động tiếp cận nền nếu chúng ta thiết lập trị số này mang giá trị dương còn ngược lại nếu ta thiết lập giá trị này mang giá trị âm Chính vì thế mà chúng ta có thể thiết lập giá trị này sao cho phù hợp với ý đồ của chúng ta để có thể tạo nên sự tiếp xúc của chân nhân vật với nền trong mỗi bước di chuyển hoặc tiếp xúc giữa thân nhân vật với nền khi nhân vật bị ngã xuống

b Chịu tác dụng của lực hấp dẫn giữa các đối tượng

Đâ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 3D Animation, mà còn rất phổ biến với tất cả các đối tượng trong không gian thế giới Tính chất này sẽ làm cho các đối tượng luôn nằm trong không gian giới hạn của thế giới và đó chính là tương tác của môi trường đối với các đối tượng Nhờ

có tính chất này mà các đối tượng sẽ chuyển đông trong thế giới được tinh tế và thực hơn tùy thuộc vào giá trị mà chúng ta thiết lập cho tính chất này

c Chịu tác dụng 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 đối tượng hay ở đây là nhân vật của Animation với nhau hoặc của các đối

Trang 12

tượng khác trong thế giới Hai lực này quyết định xem sau khi các đối tượng 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 đối tượng trong quá trình chuyển động mà rõ hơn ở đây là nó sẽ quyết định khi nào nhân vật di chuyển hay đứng yên tại chỗ tùy thuộc vào tham số của hai lực đó lớn hay nhỏ mà ta có thể thiết lập khi nhân vật

di chuyển trên những nền đường khác nhau Hai tính chất này sẽ được làm rõ hơn

trong quá trình xây dựng chương trình

d Thời gian thực hiện một hành động

Thời gian thực hiện một trạng thái chính là khoảng thời gian từ khi đối tượng bắt đầu thay đổi từ một trạng thái cho đến khi thực hiện hoàn thành một hành động của trạng thái đó 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 nhân vật như: trang phục, tốc độ, kích thước, hướng chuyển động…Tùy thuộc vào từng hiệ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

e Vận tốc của nhân vật

Vận tốc của nhân vật quyết định tốc độ chuyển động của nhân vật trong không gian Vận tốc đó góp phần làm cho người quan sát có thể thấy được sự thay đổi vị trí của nhân vật trong không gian thế giới, mặc khác nó sẽ cho thấy tác dụng rõ ràng của các lực đàn hồi và ma sát của môi trường đối với nhân vật Vận tốc này nhanh hay chậm là phụ thuộc vào từng trạng thái hành động hoặc từng môi trường mà nhân vật sẽ di chuyển qua

Ví dụ: Như khi nhân vật di chuyển trên nền đường cát thì tốc độ sẽ phải chậm hơn so với khi di chuyển trên nền đường nhựa vì ma sát của nền đường cát

sẽ lớn hơn nhiều so với nền đường nhựa

g Hướng chuyển động của nhân vật

Hướng chuyển động của nhân vật chính là hướng chuyển động mà nhân vật có thể thực hiện các trạng thái hành động khác nhau của mình; tiến lên trước, lùi về phía sau hay sang trái, sang phải Hướng chuyển động của nhân vật ngoài việc thể hiện sự chuyển động tự nhiên thì có thể điều chỉnh theo ý muốn của

Trang 13

người xây dựng chương trình mô phỏng, ngoài ra nó còn thể hiện các góc nhìn

của nhân vật đối với không gian thế giới

h Kích thước của nhân vật

Kích thước của nhân vật đóng vai trò quan trọng trong quá trình mô phỏng hành động nhân vật, nó cho thấy sự thay đổi về trạng thái hành động ở các góc nhìn khác nhau, chính điều đó sẽ dẫn theo sự thay đổi tự động các thuộc tính của nhân vật mỗi khi kích thước thay đổi

Ví dụ khi nhân vật nhỏ lại thì nó sẽ chuyển động chậm hơn so với kích thước khi lớn, vì vậy mà các bước chân của nhân vật sẽ chuyển động nhanh hơn

để đạt được vận tốc ban đầu khi ta nhìn ở kích thước lớn

k Trang phục của nhân vật

Trang phục của nhân vật chính là lớp bề ngoài và là điểm nhấn để tạo lên phong cách của nhân vật Sự thay đổi trang phục ở từng thời điểm khác nhau sẽ cho thấy mỗi trạng thái riêng tại thời điểm và vị trí nhân vật đang xét Chính vì vậy mà làm cho các hành động của nhân vật được mềm mại và uyển chuyển hơn, thật hơn, tinh tế hơn trong con mắt người quan sát quá trình di chuyển giữa các vị trí, trạng thái khác nhau của nhân vật trong không gian thế giới ảo

Ví dụ: Khi bình thường nhân vật khi chưa bị tấn công sẽ mặc một trang phục màu trắng, còn khi bị thương sẽ có thêm những vết máu ở chỗ bị tấn công

l Không gian, cảnh vật môi trường tương tác với nhân vật

Không gian, cảnh vật môi trường sẽ có tác dụng rất lớn giúp cho người xem thấy được rõ các hiệu ứng và trạng thái của nhân vật trong các trình tự di chuyển cũng như hành động của nhân vật Không gian, cảnh vật được phối hợp các màu sắc đường nét, vị trí sao cho làm nổi bật hẳn nhân vật mô phỏng trong

môi trường tương tác giữa nhân vật với thế giới

1.2.4 Các vấn đề gặp phải trong quá trình 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ả của đồ án 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

Trang 14

3D Animation 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 Animation

3D Animation mô phỏng hành động của bất kì đối tượng nào trong không gian thế giới ảo, vì thế chúng ta muốn tạo ra một hiệu ứng để mô phỏng một tính chất, một trạng thái hành động cụ thể của đối tượng nào thì trước tiên ta phải xây dựng lên hình tượng nhân vật đó Mà việc tạo ra một 3D animation động tương ứng với một trạng thái hành động 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.2.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à 3D Animation Tài liệu cụ thể sẽ được tác giả chỉ dẫn cụ thể ở phần sau

Tìm hiểu trạng thái hành động di chuyển nói chung và của các trạng thái hành động nói riêng của nhân vật trong một hoàn cảnh cụ thể

Có thể sử dụng các ảnh của nhân vật với các tư thế rồi ghép chúng lại để xây dựng lên hình tượng nhân vật Sau đó lập trình điều khiển để tạo ra các trình

tự hành động của nhân vật đối với mỗi trạng thái cụ thể Đâ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

Trang 15

mô phỏng hành động của nhân vật 3D trong môi trường thực tại ảo

2.2 Kỹ thuật mô phỏng

Như đã biết một nhân vật khi hành động thì nó sẽ thực hiện rất nhiều các động tác khác nhau trên cơ thể, vì vậy mà việc xây dựng nó đòi hỏi rất nhiều kỹ thuật của người mô phỏng Trong đồ án này tác giả xin trình bày một phương pháp mô phỏng các hiệu ứng hành động của nhân vật dựa trên các kỹ thuật xử lý

và mô phỏng ảnh động Để có thể mô phỏng được các hiệu ứng hành động của nhân vật, chúng ta đi tìm hiểu và nghiên cứu các thuật toán quan trọng sau:

Khởi tạo nhân vật và trang phục

Điểu khiển mô phỏng các trạng thái hành động của nhân vật

Các vấn đề liên quan tới camera và các phím điều khiển

2.2.1 Khởi tạo nhân vật và trang phục

a.Khởi tạo nhân vật

Để khởi tạo nhân vật chúng ta cần thực hiện theo bước cơ bản sau:

* Xác định vị trí, chiều cao, độ cao, vùng nền

Mọi đối tượng trong thế giới đều được xây dựng và tạo lên bắt đầu bằng các polygon (đa giác) Sự kết hợp của các khối polygon sẽ làm cơ sở để xây dựng một nhân vật Trong đồ án này do chỉ đi sâu về việc điều khiển về trạng thái hành động do đó mà việc xây dựng nhân vật sẽ dựa vào các hình mẫu đã được xây

Trang 16

dựng từ các ảnh hay nói đúng hơn là tập hợp ảnh chứ không xây dựng ở mức cơ

sở từ các polygon nhưng sẽ dựa vào các điểm polygon trên nhân vật để xác định

vị trí cũng như các lực tương tác với nhân vật

Trước tiên ta sẽ dùng hàm sau để khởi tạo cho nhân vật

player::player()

{ } player::~player()

{ } Sau khi đã có hàm khởi tạo ta sẽ dùng hàm đó để tiếp tục load các ảnh đã

có sẵn bằng hàm sau :

player::init(char *file_name, char *bitmap_path) (1)

{ m_player_object = Morfit_object_create_from_file(file_name);

} Trong đó:

+ m_player_object là một biến được tạo ra cho một đối tượng nhân vật, và được hai báo theo chương trình của morfit có dạng sau: DWORD _player_object;

+ char *file_name: tên file chứa hình ảnh nhân vật có định dạng bitmap hoặc jpg

+ char *bitmap_path: đường dẫn tới file ảnh đó

Như vậy ta sẽ load được hình ảnh và thấy được nhân vật trong không gian

thế giới Ngoài ra trong hàm (1) này ta có thể khai báo các biến để xác định một

vài trạng thái ban đầu cho nhân vật như:

m_speed = 0; // tốc độ khi nhân vật đứng nguyên không di chuyển m_friction = 0.8; // hệ số ma sát

m_max_speed = 50; // tốc độ tối đa khi di chuyển (khi chạy)

m_min_speed = 2; // tốc độ tối thiểu (khi đi bộ hoặc lên dốc)

m_skin_id = 0; //trang phục trong trạng thái bình thường

Trang 17

Như đã nói việc xác định vị trí của nhân vật trong không gian thế giới là

vô cùng quan trong và nó được xác định chủ yếu vào các hàm sau:

+ Hàm tạo véc tơ trên 3 trục tọa độ không gian x,y,z ( hay chính là việc

xác định tọa độ trong không gian thế giới):

void set_vector(double vector[3], double x, double y, double z);

double up_location[3], down_location[3];

set_vector(up_location, location[0], location[1], 1000000);

set_vector(down_location, location[0], location[1], -1000000);

}

Biến double location[3]; được khai báo tương ứng với vị trí tọa độ không

gian (2) hàm này sẽ cho phép xác định vị trí của nhân vật Nó kết hợp với các

véc tơ tọa độ sẽ càng làm dễ dàng trong việc xác định vị trí để ta có thể điểu khiển nhân vật tiến, lùi hay di chuyển ngang …

Trang 18

Ngoài ra có thể kết hợp với biến DWORD terrain_poly, blocking_object;

để có thể tạo ra một cờ điểu khiển phát hiện va chạm một trạng thái nhân vật có thể thực hiện thông qua đoạn mã sau:

DWORD terrain_poly, blocking_object;

int flag=Morfit_object_is_movement_possible(m_player_object, up_location, down_location, &terrain_poly, point_below, &blocking_object);

sẽ xác định được một vùng nền mà nhân vật có thể di chuyển qua

Sau khi xác định được vị trí và tọa độ của nhân vật ta sẽ khai báo một biến

để lưu lại vị trí như sau: double save_location[3];

+ Hàm xác định chiều cao chính giữa của nhân vật:

Trong trường hợp bạn muốn xác định phần giữa cơ thể của nhân vật để theo một chiều cao trên track, thì bàn chân của nhân vật phải được đặt ở trên sàn Điều này được minh hoạ bằng hình vẽ sau:

Hình 5 Xác định phần giữa cơ thể của nhân vật

theo một chiều cao trên track

Trang 19

Ở hình vẽ minh họa trên, chúng ta xác định điểm giữa của đối tượng theo một track bằng một nửa chiều cao của nhân vật trên mặt đất Điều này đã chứng

tỏ là bàn chân của nhân vật ở trên sàn Để tính được chiều cao của nhân vật, chúng ta sử dụng hàm sau:

Morfit_object_get_bounding_box(DWORD m_player_object, double box[2][3]);

Tiếp theo là tính toán giá trị nhỏ nhất và giá trị lớn nhất của các tọa độ x,

y, z và đặt chúng vào một mảng với tên là box như sau:

double height = (box[1][2]-box[0][2]);

+ Hàm xác định độ cao của nhân vật (hiểu là độ cao so với mực nước biển):

Khi xác định được chiểu cao chính giữa của nhân vật thì lúc này việc xác định độ cao của nhân vật đơn giản hơn rất nhiều Độ cao của nhân vật chính là độ cao của nền (điểm giao giữa chân và nền) cộng với chiều cao tính từ chính giữa nhân vật xuống bên dưới nền (m_height/2) và được xác định như sau:

double new_altitude = point_below[2] + m_height / 2;

Vấn đề khó khăn hơn ở đây là khi đạt tới 1/3 chiều cao của nhân vật thì không thể làm giảm xuống được nữa vì vậy khi đó ta sẽ lưu lại trạng thái và vị trí của nhân vật, còn không thì ta sẽ được một vị trí mới ở một độ cao mới có thể xem qua đoạn mã sau:

if(new_altitude > save_location[2] + m_height / 3)

Trang 20

+ Hàm thay đổi tỉ lệ kích thước theo mặc định (scale_default):

Trang 21

+ Hàm thay đổi tỉ lệ kích thước theo các tham số của các trục tọa độ:

Việc thay đổi có thể thực hiện trên từng trục X, Y, Z (X_AXIS, Y_AXIS, Z_AXIS) hoặc có sự kết hợp của các trục khác (ví dụ: scale(1.1, X_AXIS+Y_AXIS))

void player::scale(double factor, int axis)

Ở đây factor là hệ số mà ta có thể tùy chọn theo điều kiện cần, do đó ta sẽ

có được một nhân vật có kích thước phù hợp trong mọi trường hợp

+ Hàm thiết lập tham số thay đổi theo tỉ lệ kích thước:

m_max_speed = MAX_SPEED * scale[2] / 3;

m_min_speed = MIN_SPEED * scale[2] / 3;

//set height

Trang 22

ta nói tới tốc độ thực hiện một bước chân so với khi chưa thu nhỏ kích thước)

Ở đây gia tốc được đặt giá trị là 4: #define ACCELERATION 4

b Trang phục của nhân vật

Trang phục là một phần không thể thiếu trong quá trình xây dựng nhân vật khi mô phỏng, nó quyết định và có tầm quan trọng để tạo lên tính cách, diện mạo, tính đồng bộ… của nhân vật đối với không gian thế giới Vì vậy việc tạo

và xây dựng trang phục cho nhân vật cũng là một phần đáng lưu ý của tác giả trong đề tài này

Trước tiên ta sẽ khai báo các biến liên quan đến trang phục:

int m_skin_id;

DWORD m_skin_bitmap, m_pain_bitmap;

Biến m_skin_id có giá trị bằng 0 khi nhân vật có trang phục thường và có giá trị bằng 1 khi nhân vật trong tình trạng bị thương

m_skin_bitmap, m_pain_bitmap lần lượt là các biến khai báo các ảnh trang phục của nhân vật ở tình trạng bình thường và tình trạng bị thương

Việc thay đổi trang phục của nhân vật được hiểu chính là việc thay đổi các ảnh để có thể làm cho trang phục của nhân vật thay đổi như vậy khi đó nhân vật

sẽ có một trang phục mới và ta có thể dễ dàng chuyển đổi từ trạng thái bình thường sang trạng thái bị thương và ngược lại mà ta có thể thấy rõ hơn qua đoạn

mã sau:

void player::replace_skin(void)

{

if(m_skin_id==0)

Trang 23

{ Morfit_object_set_bitmap(m_player_object, m_pain_bitmap);

m_skin_id=1;

return;

} Morfit_object_set_bitmap(m_player_object, m_skin_bitmap);

m_skin_id=0;

}

2.2.2 Điều khiển mô phỏng các trạng thái hành động của nhân vật

Điều khiển mô phỏng các trạng thái hành động của nhân vật là phần chính của đề tài này vì vậy mà tác giả sẽ đi sâu vào các hàm và đoạn mã mô phỏng

Việc xây dựng các trạng thái hành động của nhân vật phụ thuộc vào nhất nhiều các yếu tố như lực ma sát, trọng lực, hướng di chuyển, trình tự di chuyển do đó dưới đây là các hàm xác định các yếu tố đó

a Hàm xác định lực ma sát và trọng lực tác dụng lên nhân vật

Trước tiên ta phải hiểu rằng lực ma sát luôn luôn có tác dụng làm cản và làm giảm tốc độ chuyển động của một đối tượng trong môi trường của nó Với mỗi môi trường và trọng lượng của đối tượng khác nhau mà lực ma sát tác dụng

sẽ lớn hay nhỏ khác nhau Ví dụ như một đối tượng chuyển động trên mặt nền đường nhựa nhẵn (có hệ số ma sát nhỏ) sẽ chuyển động nhanh hơn một đối tượng chuyển động trên mặt nền cát (có hệ số ma sát lớn)

Như đã nói khối lượng (mà ở đây muốn nói tới chính là trọng lượng của nhân vật) là thành phần quan trọng trong công thức tính lực ma sát vì nó có liên quan tới trọng lực Công thức tính lực trọng lực như sau :

player_mass*earth_gravity*sin(alpha)

Trong đó:

+ player_mass: Khối lượng của nhân vật (kí hiệu là m)

+ earth_gravity: Lực hút của trái đất (kí hiệu là g và thường có giá trị g=9,18)

+ alpha : Góc nghiêng của nhân vật đối với mặt ngang nền

Trang 24

Sau khi đã xác định được trọng lực thì việc tính toán lực ma sát được trở lên dễ dàng Sau đây là công thức tính lực ma sát:

// quá trình xác định phương và hướng một véc tơ trọng lực (5)

Morfit_math_cross(plane, z_vector, gravity_direction);

Morfit_math_cross( plane, gravity_direction, gravity_direction);

Morfit_math_normalize_vector(gravity_direction);

if(plane[2] < -1 || plane[2] > 1)

return(m_friction); //trả về ma sát của môi trường

// tính trọng lực (6)

double cos_alpha = plane[2];

double alpha = acos(cos_alpha);

double gravity_force = sin(alpha); //m*g*sin(alpha)

// xác định hướng của nhân vật

double direction[3];

Trang 25

{ m_current_sequence = set_animation_sequence("death",300);

m_sequence_id_num = FALL;

} // tổng lực tác dụng nhân vật (8)

double result = m_friction+gravity_factor * gravity_force;

(5): Quá trình xác định một véc tơ chính của trọng lực

(6): Quá trình tính trọng lực tác dụng lên nhân vật

(7): Xác định hệ số ma sát

(8): Tổng hợp các lực tác dụng lên nhân vật

Trang 26

Ghi chú: Khi nhân vật đang đứng trên bề mặt thì lực ma sát và hợp lực sẽ trả về giá trị m_friction (nhỏ hơn 1) Khi đang đi xuống đồi (một độ nghiêng) nó

sẽ trả về giá trị lớn hơn (lớn hơn 1) vì vậy mà sẽ làm cho nhân vật chuyển động nhanh hơn Khi đi lên đồi (một độ nghiêng) thì sẽ trả về một số nhỏ hơn m_friction vì vậy mà nhân vật sẽ di chuyển chậm lại

b Hàm thiết lập trình tự tốc độ cho nhân vật

Trình tự tốc độ nhân vật là trình tự vận tốc của nhân vật thực hiện trong một quãng đường trong một khoảng thời gian xác định Ở đây ta sẽ đi thiết lập trình tự tốc độ trong một quãng đường (một đoạn đường) cụ thể và nó chính là việc nhân vật đã di chuyển trên một quãng đường thẳng chính vì vậy mà phải xây dựng công thức liên kết giữa tốc độ của nhân vật và trình tự tốc độ Ở đây chúng ta có thể hiểu là trình tự tốc độ sẽ tuyến tính với tốc độ của nhân vật theo một phương trình đường thẳng (sequence_speed=F(player_speed)) có dạng y = ax + b

Trong đề tài này tác giả sẽ xây dựng công thức tính khi tốc độ của nhân vật là 1 thì trình tự tốc độ sẽ là 0.7 và khi tốc độ của nhân vật là m_max_speed thì trình tự tốc độ sẽ là 0.25 Vì vậy mà khi thực hiên thay đổi các tùy chọn thì sẽ nhìn thấy sự thay đổi về hiệu ứng trạng thái hành động trong không gian của trình tự tốc độ như thế nào

Sự thay đổi của chính trình tự tốc độ sẽ làm cho một vài tham gia số của tỉ lệ kích thước nhân vật thay đổi Như vậy việc thường xuyên cập nhật các tham số về tỉ lệ kích thước sẽ làm tăng thêm vẻ đẹp bề ngoài sự uyển chuyển của nhân vật

Morfit_3D_sequence_set_speed(m_current_sequence, sequence_speed);

Là hàm được gọi để thiết lập cho trình tự nhân vật

Sau đây là đoạn chương trình thực hiện các mô tả thuật toán ở trên với việc thiết lập trình tự tốc độ cho nhân vật:

void player::set_sequence_speed()

{

double sequence_speed=1;

Trang 27

if(m_sequence_id_num==FALL || m_sequence_id_num==ATTACK || m_sequence_id_num==PAIN)

return;

if(m_sequence_id_num==STAND)

sequence_speed=get_standing_sequence_speed();

else {

double abs_speed=m_speed;

if(abs_speed<0)

abs_speed=-abs_speed;

m_effort++; // tăng nhịp thở double seq_speed1=0.7; //trình tự khi nhân vật có tốc độ là 1 double seq_speed_max=0.35; // trình tự khi nhân vật có tốc độ là m_max_speed

//cập nhật tham số tỉ lệ kích thước nhân vật double scale[3];

sequence_speed=a*abs_speed+b;

if(sequence_speed<seq_speed_max) sequence_speed=seq_speed_max;

}

Trang 28

Morfit_3D_sequence_set_speed(m_current_sequence, sequence_speed);

}

c Hàm tạo trình tự tốc độ khi nhân vật đang đứng

Trình tự tốc độ khi nhân vật đang ở trạng thái đứng yên chính là việc mô phỏng nhịp thở của nhân vật Ở đây thiết lập các giá trị sao cho nhịp độ âm thở (tempo) phù hợp với tần suất (effort) Việc tăng giảm tần suất của nhịp thở cũng kéo theo sự tăng giảm của âm độ nhịp thở Trong trường hợp này sẽ đưa ra công thức như sau: tempo có giá trị là 0.1 (tempo==0.1) khi effort có giá trị 0 (effort=0) và tempo cũng đạt 0.1 khi effort==400

Sau đây là đoạn mã mô phỏng:

Trang 29

WORD player::set_animation_sequence(char *sequence_name, int transition_duration)

{

DWORD anim3d = Morfit_object_get_3D_animation(m_player_object); DWORD sequence = Morfit_3D_sequence_get_using_name(anim3d, sequence_name);

if(sequence == NULL)

return(NULL);

Morfit_object_set_3D_sequence(m_player_object, sequence, transition_duration);

return(sequence);

}

e Hàm lựa chọn trình tự cho nhân vật

Việc lựa chọn trình tự cho nhân vật được thực hiện khi ta thiết lập các trình tự đã có như trình tự đi bộ, trình tự tấn công bị thương, trình tự đứng,…Với mỗi trình tự sẽ được gắn một số id (m_sequence_id_num) vì vậy mà sẽ rất dễ dàng cho việc lựa chọn, quản lý các trình tự

Ở đây chúng ta sẽ cố gắng giữ m_sequence_id_num được cập nhập nhưng trong một số trường hợp thì không thể Ví dụ nếu trình tự hiện tại (m_current_sequence) là trình tự tấn công (m_attack_sequence) và sẽ được phép làm như sau:

Morfit_object_set_3D_sequence(m_player_object, m_attack_sequence, 0); Morfit_object_replace_3D_sequence_when_finished(m_player_object, m_stand_sequence,300);

Trong trường hợp không biết chính xác thì trình đứng sẽ trở thành trình tự hiện tại Vì vậy mà ở đây sẽ truy vấn tới trình tự hiện tại và sẽ cập nhập m_sequence_id_num và m_current_sequence phù hợp Để hiểu rõ ý này xem đoạn mã sau:

Trang 30

DWORD sequence = Morfit_object_get_3D_sequence(m_player_object); if(sequence == m_stand_sequence)

{

m_sequence_id_num = STAND;

m_current_sequence = m_stand_sequence;

} else {

if(sequence == m_walk_sequence)

m_sequence_id_num = WALK;

m_current_sequence = m_walk_sequence;

} Chú ý điều quan trọng là khi chúng ta thiết lập một trình tự riêng biệt (specific sequence) thì đầu tiên sẽ thiết lập một trạng thái trình tự hành động

và chỉ sau khi trình tự trạng thái hành động kết thúc thì nó sẽ tự động thiết lập trình tự muốn có Có nghĩa là nếu muốn tạo trình tự đi bộ (walk_sequence) ta

Sau đây là đoạn mã của quá trình lựa chọn một trình tự:

Trang 31

m_sequence_id_num = STAND;

m_current_sequence = m_stand_sequence;

} else {

if(sequence == m_walk_sequence)

m_sequence_id_num = WALK;

m_current_sequence = m_walk_sequence;

}

if( (sequence == m_walk_sequence) && (m_speed < m_min_speed

&& m_speed > -m_min_speed))

{

//kiểm tra trình tự ngã (fall_sequence) đã kết thúc hay chưa DWORD anim3d = Morfit_object_get_3D_animation(m_player_object);

Trang 32

DWORD fall_sequence = Morfit_3D_sequence_get_using_name(anim3d,

set_animation_sequence("stand",1000);

m_sequence_id_num = STAND;

} }

if(m_sequence_id_num!=FALL) {

//thiết lập một trình tự đúng if(m_speed<0 )

{ Morfit_3D_sequence_backwards_play(m_current_sequence,YES);

} else {

Morfit_3D_sequence_backwards_play(m_current_sequence,NO);

} }

set_sequence_speed();

}

Trang 33

f Hàm di chuyển trạng thái hành động của nhân vật

Di chuyển trạng thái hành động của nhân vật là việc thực hiện các thao tác điều khiển cho nhân vật thực hiện một hành động để chuyển từ vị trí này sang vị trí khác như tiến lên trước, lùi về phía sau, sang phải, sang trái…

Để thực hiện việc di chuyển cho nhân vật trước tiên phải xác định vị trí

mà nhân vật cần đi tới Việc này được thực hiện một cách dễ dàng qua hàm :

Morfit_object_get_location(m_player_object,&save_location[0],

&save_location[1], &save_location[2]); Sau đó sẽ tạo một trình tự cho nhân vật qua hàm:

DWORD sequence = Morfit_object_get_3D_sequence(m_player_object);

Có nghĩa là giả sử m_sequence_id_num==WALK là một trình tự đi bộ hoặc là một vài trình tự vận chuyển ban đầu của trình tự đi bộ, nếu ta có thể thay thế sequence==m_walk_sequence thì nó sẽ không thể bắt kịp sự chuyển vận từ trạng thái đứng sang trạng thái đi bộ được Nên nhớ rằng trình tự vận chuyển đã được phát sinh một cách tự động bởi các engine vì vậy mà việc chuyển đổi từ một trình tự này sang một trình tự khác được thực hiện một cách mềm mại và nhịp nhàng Nếu không muốn trình tự vận chuyển phát sinh một cách tự động thì đơn giản có thể gọi hàm sau :

Morfit_object_set_3D_sequence( ,0);

Trong đó với 0 là khoảng thời gian tồn tại cho sự vận chuyển

Cũng như vậy trong quá trình di chuyển phải xác định lực đã sử dụng hay chính xác hơn chính là lực tác dụng vào nhân vật, vì vậy mà biến int muscle_force_used = NO; được khai báo có ý nghĩa ban đầu là chưa có lực nào tác dụng Như đã nói ở trên thì tốc độ của nhân vật phụ thuộc vào các thành phần lực vì vậy mà dựa vào đó mà có thể thấy rõ sự nhanh hay chậm của nhân vật trong từng trình tự trạng thái chuyển động

Sau đây là một đoạn chương trình mô phỏng việc dịch chuyển tiến phía trước, lùi phía sau, sang trái, sang phải của nhân vật:

void player::move(void)

{

Trang 34

int muscle_force_used = NO; // ko có lực tác dụng double save_location[3];

//Xác định vị trí nhân vật cần di chuyển tới Morfit_object_get_location(m_player_object, &save_location[0],

&save_location[1], &save_location[2]);

DWORD sequence = Morfit_object_get_3D_sequence(m_player_object); if(m_sequence_id_num == WALK || sequence == m_stand_sequence) {

//tiến phía trước if(GetAsyncKeyState(VK_UP) < 0) {

m_speed += m_acceleration;

muscle_force_used = YES;

} //lùi phía sau if(GetAsyncKeyState(VK_DOWN) < 0) {

muscle_force_used = YES;

m_speed -= m_acceleration;

} }

if(m_sequence_id_num == WALK || sequence == m_stand_sequence || sequence == m_attack_sequence || sequence == m_pain_sequence)

{

//sang trái if(GetAsyncKeyState(VK_LEFT) < 0) {

Morfit_object_rotate_z(m_player_object, 6, WORLD_SPACE);

}

Trang 35

//sang phải if(GetAsyncKeyState(VK_RIGHT) < 0) {

Morfit_object_rotate_z(m_player_object, -6, WORLD_SPACE);

} }

// xác định vận tốc và lực đã sử dụng

double gravity_and_friction_factor = get_friction_and_gravity_factor(); if(muscle_force_used == NO || fabs(m_speed) > m_min_speed) {

m_speed *= gravity_and_friction_factor;

if(muscle_force_used == YES) if(fabs(m_speed) < fabs(m_min_speed)) m_speed = m_min_speed * m_speed / fabs(m_speed); }

// Xác địn vùng nền dưới double point_below[3];

get_polygon_below(point_below);

// Xác định một trạng thái mới if(new_altitude > save_location[2] + m_height / 3) {

Trang 36

Morfit_object_set_location(m_player_object,save_location[0],

save_location[1], save_location[2]); m_speed = -m_speed * 0.5;

} else {

double location[3];

Morfit_object_get_location(m_player_object, &location[0],

&location[1], &location[2]); Morfit_object_set_location(m_player_object, location[0],

location[1], new_altitude); }

}

g Một số trạng thái chuyển động của nhân vật

* Trạng thái tấn công (Attack)

Ở đây sẽ mô phỏng nhân vật trong tư thế dùng vũ khí tấn công một đối tượng khác Một trình tự tấn công thực tế được xây dựng từ rất nhiều các trình tự tấn công khác Như tấn công với súng, phóng đạn, bắn trúng mục tiêu với cùng một điều khiển…Trong game thì nó rất dễ dàng có được các trạng thái riêng biệt đối với các trình tự khác nhau Có thể tham khảo đoạn mã sau để hiểu rõ hơn về một trình tự trạng thái tấn công:

Morfit_object_replace_3D_sequence_when_finished(m_player_object, m_stand_sequence,300);

m_current_sequence=m_attack_sequence;

Trang 37

Morfit_object_replace_3D_sequence_when_finished(m_player_object, m_stand_sequence,400);

m_current_sequence=m_pain_sequence;

m_sequence_id_num=PAIN;

}

* Cập nhập theo một trạng thái hành động mới

Như đã nói khi một trạng thái được thay đổi thì các tham số hành động một hành động của nhân vật sẽ thay đổi theo sao cho phù hợp với từng trình tự

mô phỏng hành động đó Ở đây có thể “load” chúng khi mà cần tới những ảnh

mô phỏng đó trong khi các “engine” sẽ không đủ nhanh để “load” những ảnh đã

có sẵn trong bộ nhớ Có thể theo dõi đoạn mã sau để thấy được sự thay đổi giữa các trạng thái:

int player::update_according_to_new_animation(void)

{

char buff[MAX_PATH];

strcpy(buff,m_bitmap_path);

Trang 38

Morfit_3D_sequence_set_speed(m_fall_sequence,0.5);

} m_walk_sequence = Morfit_3D_sequence_get_using_name(anim3d, "walk"); if(m_walk_sequence == NULL)

Ngày đăng: 03/08/2016, 16:10

HÌNH ẢNH LIÊN QUAN

Hình 1 - Ứng dụng Thực tại ảo trong thiết kế kiến trúc - MÔ PHỎNG HÀNH ĐỘNG NHÂN VẬT TRONG XÂY DỰNG MÔ HÌNH 3D
Hình 1 Ứng dụng Thực tại ảo trong thiết kế kiến trúc (Trang 5)
Hình 2 - Ứng dụng Thực tại ảo trong lĩnh vực giải trí - MÔ PHỎNG HÀNH ĐỘNG NHÂN VẬT TRONG XÂY DỰNG MÔ HÌNH 3D
Hình 2 Ứng dụng Thực tại ảo trong lĩnh vực giải trí (Trang 6)
Hình 3 – Mô hình huấn luyện bay sử dụng công nghệ Thực tại ảo - MÔ PHỎNG HÀNH ĐỘNG NHÂN VẬT TRONG XÂY DỰNG MÔ HÌNH 3D
Hình 3 – Mô hình huấn luyện bay sử dụng công nghệ Thực tại ảo (Trang 7)
Hình 4 - Phẫu thuật ảo – Phương pháp - MÔ PHỎNG HÀNH ĐỘNG NHÂN VẬT TRONG XÂY DỰNG MÔ HÌNH 3D
Hình 4 Phẫu thuật ảo – Phương pháp (Trang 8)
Hình 5. Xác định phần giữa cơ thể của nhân vật - MÔ PHỎNG HÀNH ĐỘNG NHÂN VẬT TRONG XÂY DỰNG MÔ HÌNH 3D
Hình 5. Xác định phần giữa cơ thể của nhân vật (Trang 18)
Hình nhân vật khi khởi động chương trình ở trạng thái đứng yên: - MÔ PHỎNG HÀNH ĐỘNG NHÂN VẬT TRONG XÂY DỰNG MÔ HÌNH 3D
Hình nh ân vật khi khởi động chương trình ở trạng thái đứng yên: (Trang 51)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w