Hai hộp bao AABB không va chạm nếu xảy ra một trong các điều kiện sau: - xmin1 > xmax2 hoặc xmax1 < xmin2
- ymin1 > ymax2 hoặc ymax1 < ymin2 - zmin1 > zmax2 hoặc zmax1 < zmin2
Hộp bao này rất đơn giản, dễ tạo ra và kiểm tra, phát hiện va chạm cũng rất dễ dàng. Tuy nhiên, hộp bao AABB cũng tạo ra nhiều khoảng trống giữa vật thể và hộp bao. Khi vật thể không nằm song song với các trục tọa độ và có dạng dài thì khoảng trống này càng lớn. Thực tế, trong các hệ thống thực tại ảo người ta chỉ sử dụng kỹ thuật hộp bao AABB để giới hạn vùng va chạm, sau đó để kiểm tra và tìm điểm va chạm chính xác hơn người ta sẽ sử dụng kỹ thuật hộp bao theo hướng OBB.
2.2. Kỹ thuật phát hiện va chạm dựa vào hộp bao OBB 2.2.1. Định nghĩa hộp bao OBB 2.2.1. Định nghĩa hộp bao OBB
Hộp bao theo hướng OBB (Oriented Bounding Box) là hộp bao AABB nhưng trục có hướng bất kỳ. OBB có ưu điểm hơn AABB là giảm không gian trống giữa vật thể và hộp bao. Tuy nhiên, việc tạo ra và thao tác trên hộp bao loại này phức tạp hơn loại AABB nhiều, mặc dù vậy người ta vẫn dùng loại hộp bao này nhiều hơn vì nó cho độ chính xác cao hơn nhiều so với hộp bao AABB.
Hình 2.5: H p bao OBB
Loại hộp bao này bao khá vừa các dạng vật thể. Tuy nhiên, với vật thể có nhiều đỉnh cao như hình bên thì rõ ràng chưa phải tối ưu.
2.2.2. Xây dựng hộp bao OBB
Trong phần này, tất cả các vectors được hiểu là trong không gian R3. Một OBB được xác định bởi tâm C, ba vector chỉ hướng của hộp bao A0,A1,A2 và ba hệ số độ dài tương ứng với kích thước của hình hộp là a0 > 0, a1 > 0, a2 > 0. OBB được mô tả bởi:
i a x A x C i i: i i ___ 2
và 8 đỉnh của hộp bao là: 2 0 i i i ia A C
trong đó: i 1 với mọi i.
2.2.3. Phát hiện va chạm giữa hai hộp bao OBB
Để kiểm tra 2 hộp bao có va chạm với nhau hay không ta sử dụng định lý sau: 2 đối tượng lồi sẽ không giao nhau khi và chỉ khi tồn tại mặt phẳng P cô lập được chúng.
Trong không gian 3 chiều R3, nếu 2 hộp bao giao nhau thì hình chiếu của chúng trên các trục toạ độ x, y và z cũng phải giao nhau.
Thuật toán tổng quát có thể phát biểu ngắn gọn như sau:
- Chiếu mỗi hộp bao (AABB) lên các trục toạ độ x, y và z. Kết quả thu được là các đoạn thẳng.
- Hoặc có thể chiếu mỗi hộp bao (AABB) lên các mặt phẳng toạ độ xOy, yOz và zOx. Kết quả thu được là các hình chữ nhật.
- Kiểm tra sự giao nhau giữa các đoạn thẳng được chiếu lên các trục toạ độ. Nếu hình chiếu của 2 hộp bao giao nhau trên cả 3 trục toạ độ thì 2 hộp bao đó giao nhau. Ngược lại chúng không giao nhau.
- Nếu chiếu lên các mặt phẳng toạ độ thì 2 hộp bao giao nhau khi và chỉ khi hình chiếu của 2 hộp bao đó lên mỗi mặt phẳng toạ độ đều giao nhau.
2.2.3.1.Sự phân tách giữa các OBB
Cho hai khối bao OBB xác định bởi các thông số [C0,A0,A1,A2, a0, a1, a2] và [ 1
C ,B0,B1,B2, b0, b1, b2]. Các trục phân tách 2 hộp bao có dạng C0 sL trong đó L
có thể là Ai,Bj hoặc AixBj với i,j = 0,1,2.
Hình chiếu của điểm P lên đường C0 sLvới gốc C0 là: L
L L C P L . . 0
Khoảng cách từ gốc C0 tới hình chiếu là : ProjDist(P) =
L L C P L . . 0
Khoảng cách hình chiếu các đỉnh của OBB thứ nhất với gốc C0là: 2 0 2 0 0 . . Pr i i i i i i i i L L A L a A a C ojDist
Độ dài ngắn nhất chứa 8 đoạn hình chiếu có tâm K0 = 0 và bán kính là:
L L A L A L Sign a r i i i i . . . . 2 0 0
Khoảng cách hình chiếu các đỉnh của OBB thứ hai với gốc C0là: 2 0 2 0 0 . . . . Pr i i i i i i i i L L B L b L L D L A b C ojDist Trong đó: D C1 C0.
Độ dài ngắn nhất chứa 8 đoạn hình chiếu có tâm K1 L.Dvà bán kính:
L L B L B L Sign b r i i i i . . . 2 0 1
Hai đoạn chiếu sẽ không giao nhau khi và chỉ khi khoảng cách giữa các tâm lớn hơn tổng của các bán kính: |K1 - K0| > r0 + r1.
Hình 2.8: Kiểm tra va chạm giữa 2 OBB
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ố