Kiểm tra va chạm giữ a2 OBB

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu một số kỹ thuật tính toán va chạm trong thực tại ảo (Trang 32)

Mỗi đại lượng ở 2 vế có cùng mẫu số L.L. Do đó ta bỏ đi mẫu số này, điều kiện không giao nhau sẽ là:

i i i i i i i iSignLA LA bSignLB LB a D L. . . . . 2 0 2 0 Đặt: D L R . i i aiSignLAi LA R 2 . . 0 0 i i biSignLBi LB R 2 . . 0 1 (1)

 điều kiện không giao nhau là R > R0 + R1.

Các trục của OBB thứ 2 được viết dưới dạng tổ hợp các trục của OBB thứ nhất: 2 2 1 1A c A c A c Bi oi o i i với i = 0, 1, 2.

Gọi: A là ma trận với cột là các thành phần của Ai

B là ma trận với cột là các thành phần của Bi

C là ma trận với cột là các thành phần cij Khi đó, ta có:

B = AC → C = AT

B trong đó T là toán tử chuyển vị.

j i j

i A B

Tương tự, các trục của OBB thứ nhất có thể viết dưới dạng tổ hợp các trục của OBB thứ hai:

2 2 1 1B c B c B c Ai io o i i với i = 0, 1, 2.

Kiểm tra điều kiện không giao nhau gồm tích vô hướng của các bộ ba sau:

j i o j i i A xB Signi i c A 2 1 0. ,1 2 0 1 1 , . i j ij jo AxB Sign j j c B (2) Trong đó:

Sign(0,1) = Sign(1,2) = Sign(2,0) = +1 và Sign(1,0) = Sign(2,1) = Sign(0,2) = -1.

Từ phương trình (1) và (2) ta có bảng sau:

Hình 2.9: Bảng các giá trị của R, Ro,R1 để kiểm tra điều kiện 2 OBB không giao nhau: R>Ro+R1

2.3. Kỹ thuật phát hiện va chạm dựa vào khối bao cầu 2.3.1. Định nghĩa khối bao cầu 2.3.1. Định nghĩa khối bao cầu

- Bounding spheres là các khối bao có dạng hình cầu bao lấy đối tượng, được xác định bởi 4 giá trị: tọa độ tâm C(xc, yc, zc) và bán kính r.

- Khối bao dạng này rất dễ tạo ra và rất đơn giản trong các thao tác kiểm tra va chạm. Dễ dàng kiểm tra va chạm là bởi vì khi đối tượng quay hay chuyển động thì hình dạng, hướng của hình cầu đều không bị thay đổi, hình cầu không bị tác động khi vật thể tự quay. Hình cầu không phụ thuộc vào trục.

H nh 2.10. Kh i bao c u

- Ta cũng có thể thay thế các hình bao cầu bởi các khối ellipsoid. Hình bao cầu chỉ là trường hợp riêng của hình bao ellipsoid.

- Tuy nhiên, hình bao cầu lại có một số nhược điểm.

- Nó thường biểu diễn không chính xác hình dạng các vật thể nếu như các vật thể này không có dạng khối cầu, đặc biệt khi hình dạng của vật thể có dạng bẹt hoặc dài thì càng không chính xác. Vì vậy thuật toán sẽ không được tối ưu.

- Khối bao này tạo ra nhiều không gian trống giữa vật thể với khối cầu. - Rất khó hợp nhất 2 hay nhiều BS loại này bởi vì sẽ tạo ra sai số rất lớn.

Hình 2.11:Hợp nhất và kiểm tra va chạm giữa 2 khối bao cầu

2.3.2. Xây dựng khối bao cầu

- Ta dễ dàng tạo được hộp bao AABB như hình bên

- Lấy tâm của hộp bao AABB làm tâm của hình

cầu

- Chọn đường kính của hình cầu bằng độ dài đường chéo của hộp bao AABB.

Với cách tạo đơn giản này cho ta một khối bao hình cầu không được tối ưu lắm. Tuy nhiên, cách này tương đối đơn giản, dễ dàng thực hiện.

Ta hãy xem một phương pháp cải tiến của phương pháp nêu trên:

- Lấy tâm của khối cầu là tâm của hộp bao AABB

- Duyệt tất cả các đỉnh của đối tượng

- Tìm đỉnh mà khoảng cách từ tâm khối cầu đến

H nh 2.12. Xây d ng kh i bao c u

đó là lớn nhất và lấy khoảng cách đó làm bán kính của hình cầu.

Với phương pháp này thì hạn chế được khoảng không gian trống hơn phương pháp trên, tuy nhiên cần phải thực hiện nhiều phép toán so sánh và tìm kiếm.

Qua 2 phương pháp xây dựng nhanh BS ở trên ta thấy rằng giải pháp trên là không phải tối ưu. Rõ ràng cả 2 phương pháp đều tạo ra những khoảng không gian trống quá lớn nên chúng ta cần tìm ra giải pháp hạn chế được khoảng không gian trống càng nhiều càng tốt.

Giải pháp tối ưu nhất được trình bày như sau:

Giả sử S là một tập các đỉnh của một đối tượng (hay đơn giản S là một tập các điểm). Với tất cả các đỉnh V thuộc tập S ta thực hiện các bước sau:

Bước 1: Tìm tất cả các đỉnh Vmax là đỉnh có tọa độ lớn nhất theo các trục tọa độ (x, y, z).

Bước 2: Tìm tất cả các đỉnh Vmin là đỉnh có tọa độ nhỏ nhất theo các trục tọa độ (x, y, z).

Bước 3: Chọn ra cặp đỉnh Vmax, Vmin sao cho khoảng cách giữa chúng theo các trục tọa độ là lớn nhất.

Bước 4: Chọn tâm C của khối cầu là trung điểm của vector Vmax - Vmin

Bước 6: Duyệt tất cả các đỉnh còn lại, gọi d là khoảng cách từ đỉnh đang xét tới tâm của khối cầu. Nếu một đỉnh nào đó nằm ngoài khối cầu thì ta di chuyển tâm C của khối cầu một khoảng (d+r)/2 và chọn bán kính mới của khối cầu là (d+r)/2.

Khi đã duyệt tất cả các đỉnh thì chắc chắn rằng khối cầu đã bao tất cả các đỉnh (hay các điểm).

2.3.3. Phát hiện va chạm giữa hai khối bao cầu

Một khối cầu được xác định bởi tâm và bán kính của nó. Giải quyết vấn đề va chạm giữa 2 khối cầu có vẻ đơn giản hơn. Bằng cách tính khoảng cách giữa 2 tâm của khối cầu, nếu khoảng cách này nhỏ hơn hoặc bằng tổng của 2 bán kính của 2 khối cầu thì 2 khối cầu giao nhau.

H nh 2.13: Hai khối cầu xảy ra va chạm Nhưng vấn đề lại không chỉ có vậy, ta hay xem hình dưới:

Rõ ràng là theo hướng chuyển động của 2 quả bóng trên (ball 1 và ball 2) thì chắc chắn là 2 quả bóng đó sẽ va chạm với nhau. Nhưng thực tế thì chưa chắc như vậy là bởi vì ở đây chúng ta quên mất yếu tố thời gian. Gọi C là giao điểm của r1 với r2 (ở đây chưa nói C là điểm giao của ball 1 với ball 2). Nếu xét đến yếu tố thời gian thì tại thời điểm t1 quả bóng ball 1 chuyển động qua điểm C, tại thời điểm t2 quả bóng ball 2 chuyển động qua điểm C. Ta hoàn toàn có thể cho rằng t1 khác t2 và như vậy thì ball 1 không va chạm với ball 2. Đó chính là vấn đề chính ta cần giải quyết.

Các phương trình ở trên chỉ giải quyết được giao điểm khi chưa xét đến vấn đề thời gian. Đối với các đối tượng có hình dạng phức tạp hoặc khi không thể thiết lập được phương trình cụ thể để tìm giao điểm hoặc khi phương trình

trở nên quá phức tạp không thể giải được thì tất nhiên là chúng ta phải sử dụng đến những phương thức khác.

Các thông số cần thiết để tính toán giao điểm của 2 khối cầu đó là : điểm đầu, điểm cuối, thời gian, vận tốc (bao gồm hướng và tốc độ) của khối cầu. Để tính được điểm giao thì thời gian (time step) lại được chia thành các khoảng nhỏ hơn và chúng ta sẽ thực hiện việc di chuyển khối cầu trong mỗi khoảng thời gian đó bằng cách sử dụng đại lượng vận tốc và kiểm tra sự giao nhau trong mỗi khoảng thời gian đó. Khi có bất cứ giao điểm nào được tìm thấy (cũng có nghĩa là khối cầu này sẽ “xuyên” một phần của nó vào khối cầu khác), chúng ta sẽ lấy vị trí của khối cầu ngay trước khi khối cầu đó “xuyên” vào khối cầu khác làm vị trí giao điểm.

Rõ ràng là chúng ta không muốn 2 khối cầu xuyên vào nhau như hình trên. Do vậy chúng ta phải lấy vị trí của khối cầu ngay trước khi chúng xuyên vào nhau làm vị trí giao điểm. Khoảng chia thời gian (time step) càng nhỏ thì độ chính xác càng cao.

Vấn đề tiếp theo chúng ta phải giải quyết đó là sẽ xảy ra va chạm trong khoảng giữa mỗi khoảng thời gian (Timestep) mà ta xét. TimeStep chính là mỗi khoảng thời gian ta thực hiện di chuyển khối cầu từ vị trí hiệnt tại dọc theo hướng của vector vận tốc. Vì chúng ta kiểm tra khối cầu di chuyển trên một tia vô hạn nên luôn có khả năng điểm xảy ra va chạm nằm sau vị trí mới của khối cầu đó. Để giải quyết vấn đề này chúng ta sẽ di chuyển khối cầu, tính toán vị trí mới và tìm khoảng cách giữa điểm đầu và điểm cuối. Từ thủ tục tìm va chạm chúng ta sẽ nhận được khoảng cách từ điểm bắt đầu tời điểm va chạm. Nếu

khoảng cách này nhỏ hơn khoảng cách từ điểm bắ đầu đến điểm cuối thì sẽ có một va chạm. Để tính toán chính xác thời gian xảy ra va chạm chúng ta chỉ cần giải một phương trình đơn giản sau.

Đặt:

Dst = khoảng cách giữa điểm bắt đầu và điểm kết thúc. Dsc = khoảng cách từ điểm bắt đầu và điểm xảy ra va chạm T = TimeStep.

Vậy thời gian xảy ra va chạm (Tc) sẽ là: Tc = Dsc * T / Dst

Giả sử TimeStep là 1 giây và chúng ta tìm thấy chính xác vị trí giao điểm nằm ở khoảng cách chính giữa thời gian này. Như vậy, thời gian xảy ra va chạm chính xác phải là 0.5 giây. Điều này sẽ được hiểu là “0.5 giây sau khi bắt đầu sẽ xảy ra một va chạm”. Điểm va chạm sẽ được tính bằng cách nhân Tc với vận tốc hiện tại và cộng với vị trí điểm bắt đầu:

[Điểm va chạm] = [Vị trí bắt đầu] + [Vận tốc]*Tc

2.4. Kỹ thuật phát hiện va chạm dựa vào hộp bao elip

2.4.1. Không gian vector và sự tịnh tiến của vật thể trong không gian

Thuật toán sử dụng phương pháp Ellipsoid sau đây thiên về việc sử dụng không gian vector không phải thuộc dạng chuẩn để làm đơn giản hóa việc tính toán. Chúng ta sẽ tìm hiểu sơ qua cách chuyển từ một không gian vector này sang một không gian vector khác.

Phần lớn chúng ta chưa từng gặp bất kỳ không gian vector nào khác 2 loại không gian mà chúng ta đã học ở trường và sử dụng rất nhiều đó là không gian 2 chiều và 3 chiều hay và . Những không gian này được dùng trong hệ tọa độ chuẩn. Chúng ta cũng dễ dàng định nghĩa các không gian có số chiều lớn hơn (4, 5 hoặc vô hạn) bằng cách đưa ra các luật mà tất cả các vector trong không gian đó phải tuân theo. Tất nhiên và cũng phải tuân theo.

Tất nhiên, chúng ta cũng khó có thể tưởng tượng loại không gian có số chiều lớn hơn 3 và rõ ràng đây là một thách thực rất lớn khi chúng ta phải làm

việc với các loại không gian vector như vậy. Tuy nhiên, trong phần này chúng ta cũng chỉ sử dụng không gian 3 chiều mà thôi.

Sau đây là một số các luật mà không gian vector đều phải theo:

- Thỏa mãn luật cộng và nhân. Có nghĩa là cho 2 vector X, Y thuộc không gian vector đang xét thì Z = X + Y cũng thuộc không gian đó. Cho một số thực r, nếu X nằm trong không gian thì r*X cũng thuộc không gian đó. - Tồn tại vector không V0 sao cho với mọi vector X trong không gian đó thì

V0 + X = X với mọi vector X thì X*0 = V0.

- Nó phải thỏa mãn các phép toán học chuẩn như: luật kết hợp và luật giao hoán.

Khái niệm về tổ hợp tính tuyến của các vector trong một không gian vector đó là: một vector nhận được khi ta tổ hợp các vector trong không gian vector bởi các phép cộng và phép nhân với một số vô hướng. Ví dụ, nếu bạn có các vector X, Y, Z và phép tổ hợp được thực hiện như sau:

V = 2*X + (-3)*Y + 4*Z

Rõ ràng theo luật 1 ở trên ta thấy rằng vector V nằm trong cùng không gian với các vector X, Y, Z.

Tiếp theo ta đi định nghĩa một cơ sở cho một không gian vector. Cơ sở cho một không gian vector là các vector nằm trong không gian đó và được theo các luật sau đây:

- Tất cả các vector trong không gian vector là tổ hợp tuyến tính của các vector cơ sở.

- Mỗi vector cơ sở không thể được tạo thành bằng cách tổ hợp các vector còn lại trong cơ sở đó.

Số lượng các vector cần thiết để tạo nên cơ sở cho không gian vector đó bằng với số chiều của không gian đó.

là một không gian vector và cơ sở của nó là: e1 = (1, 0, 0)

e2 = (0, 1, 0) e3 = (0, 0, 1)

Tọa độ của một điểm trong không gian vector chính là các thành phần vô hướng trong phép nhân với các vector cơ sở trong phép tổ hợp tuyến tính. Ví dụ, ta có điểm v = (5, 2, 4), ta có thể phân tích thành như sau:

V = 5*e1 + 2*e2 + 4*e3

Đi thẳng vào vấn đề chính của chúng ta đó là làm thế nào để tạo ra được một không gian vector (ta sẽ tạo không gian Ellipsoid). Chúng ta sẽ bắt đầu đi từ cơ sở của không gian đó (và đó cũng là đủ để định nghĩa không gian vector). Nếu như một ellipsoid được định nghĩa bởi vector các bán kính là (x, y, z) thì chúng ta sẽ chọn cơ sở của không gian đó là:

V1 = (x, 0, 0) V2 = (0, y, 0) V3 = (0, 0, z)

Trong không gian ellipsoid này thì bán kính của ellipsoid sẽ là (1, 1, 1). Vấn đề cuối cùng của chúng ta là làm thế nào để chuyển được một điểm từ không gian vào không gian mới (không gian ellipsoid). Chúng ta sẽ sử dụng cơ sở ở trên để thực hiện việc này (thông qua phép tổ hợp tuyến tính):

Ta có được ma trận chuyển là:

2.4.2. Phát hiện va chạm

Ý tưởng của thuật toán là mô phỏng đối tượng trong thế giới thực bởi Ellipsoid (hình bao ellipsoid). Ellipsoid này được định nghĩa bởi tâm và bán kính của nó theo 3 trục tọa độ. Ví dụ như hình sau:

Vị trí tâm ellipsoid được ta coi như là vị trí của đối tượng… Ta di chuyển đối tượng bằng cách tác dụng lực lên đối tượng theo một hướng nào đó. Hướng này được biểu diễn bởi vector vận tốc. Vị trí mới của ellipsoid sau khi di chuyển được tính bằng cách cộng vị trí hiện tại với vector vận tốc.

Giả sử thế giới ta giả lập được tạo bởi tam giác (phân chia bề mặt vật thể hay mặt nền bởi các tam giác). Chúng ta không thể biết được chính xác là ellipsoid trong lúc di chuyển sẽ va chạm chính xác vào tam giác nào. Chính vì vậy ta sẽ phải kiểm tra tất cả các tam giác đó (ta cũng có thể chia các vật thể thành các đơn vị nhỏ hơn). Kiểm tra tất cả các khả năng va chạm nếu có. Nếu phát hiện có một va chạm xảy ra (với một tam giác nào đó) thì ta không được dừng lại mà phải kiểm tra với các tam giác khác để tìm ra va chạm xảy ra gần nhất.

Hình vẽ sau mô tả hiện tượng xảy ra khi ta tìm thấy một va chạm với tam giác A và không kiểm tra các tam giác còn lại (bao gồm tam giác B – cũng va chạm với Ellipsoid):

Để làm giảm độ phức tạp của vấn đề ta sẽ chuyển tất cả các đối tượng vào trong không gian mới của chúng ta – không gian ellipsoid. Trong không gian này thì ellipsoid thực sự là hình cầu đơn vị. Do đó, việc thao tác và tính toán trên hình cầu tất nhiên là dễ dàng hơn rất nhiều (chỉ có bán kính và không bị ảnh hưởng bởi phép quay quanh trục đi qua tâm).

Tiếp theo ta sẽ kiểm tra tất cả các mặt (tam giác). Thủ tục kiểm tra mỗi mặt có thể được chia làm 5 bước nhỏ như sau:

1. Tính mặt phẳng chứa tam giác

2. Tính điểm giao trên hình cầu khi chúng sẽ va chạm với mặt phẳng. 3. Tính điểm giao trên mặt phẳng khi hình cầu va chạm với mặt phẳng. 4. Tính toán nếu điểm va chạm trên mặt phẳng nằm trong tam giác, nếu không ta phải tính lại điểm va chạm thực sự.

5. Nếu xảy ra khả năng điểm giao không thực sự và khoảng cách tới điểm giao nhỏ hơn hoặc bằng độ lớn của khoảng cách mà chúng ta muốn di chuyển đối tượng, chúng ta sẽ kiểm tra điểm va chạm gần nhất có thể.

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu một số kỹ thuật tính toán va chạm trong thực tại ảo (Trang 32)

Tải bản đầy đủ (PDF)

(60 trang)