1. Trang chủ
  2. » Thể loại khác

XÂY DỰNG GAME GIẢI TRÍ BOMBER-MAN 3D

100 48 0

Đ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 100
Dung lượng 5,69 MB

Nội dung

.III Nhiệm vụ thực hiện và kết quả cần có Tìm hiểu về đồ họa 3D và thư viện sẽ sử dụng Opengl: Hiểu được cơ bảncách thức hoạt động cũng như các phép toán hình học trong không gian phép x

Trang 1

KHOA CÔNG NGHỆ THÔNG TIN

Tel (84-511) 736 949, Fax (84-511) 842 771

Website: itf.ud.edu.vn, E-mail: cntt@edu.ud.vn

LUẬN VĂN TỐT NGHIỆP KỸ SƯ NGÀNH CÔNG NGHỆ THÔNG TIN

MÃ NGÀNH : 05115

ĐỀ TÀI : XÂY DỰNG GAME GIẢI TRÍ BOMBER-MAN 3D

Mã số : 06T1-038 Ngày bảo vệ : 15/06 /2011

SINH VIÊN : Trương Quang Thanh

CBHD : ThS Phan Thanh Tao

ĐÀ NẴNG, 06/2011

Trang 2

Trang 3

Trang 4

trình học của bất kỳ sinh viên nào, không những mang lại một cái nhìn định hướng trước khi sinh viên rời khỏi ghế nhà trường mà còn tạo điều kiện để sinh viên có thể tiếp xúc được với công việc thực tế, vốn có những điểm khác biệt với việc học ở trường

Để hoàn thành được luận văn này, đầu tiên em xin chân thành cảm ơn

sự hướng dẫn và chỉ bảo tận tình của thầy Ths Phan Thanh Tao.

Em cũng rất cảm ơn các thầy cô trong khoa Công nghệ Thông tin trường Đại học Bách Khoa Đà Nẵng đã tận tình giảng dạy, truyền đạt những kiến thức quý báu trong thời gian qua và tạo điều kiện cho em hoàn thành luận văn này.

Xin chân thành cảm ơn sự giúp đỡ, động viên của của tất cả các bạn trong quá trình học tập cũng như quá trình thực hiện luận văn.

Em cũng muốn cảm ơn những người thân trong gia đình đã động viên, giúp đỡ và tạo điều kiện để hoàn thành luận văn.

Rất mong nhận được sự đóng góp ý kiến của thầy cô và các bạn.

Đà Nẵng 6/2011 Sinh viên thực hiện Trương Quang Thanh.

Trang 5

Tôi xin cam đoan :

1 Những nội dung trong luận văn này là do tôi thực hiện dưới sự hướng dẫn trực tiếp của thầy Ths Phan Thanh Tao.

2 Mọi tham khảo dùng trong luận văn đều được trích dẫn rõ ràng tên tác giả, tên công trình, thời gian, địa điểm công bố.

3 Mọi sao chép không hợp lệ, vi phạm quy chế đào tạo, hay gian trá, tôi xin chịu hoàn toàn trách nhiệm.

Sinh viên, Trương Quang Thanh

Trang 8

MỤC LỤC

MỞ ĐẦU 1

.I Giới thiệu đề tài 1

.II Mục đích 1

.III Nhiệm vụ thực hiện và kết quả cần có 1

.IV Nội dung thực hiện 2

CƠ SỞ LÝ THUYẾT 4

.I CÁC PHÉP BIẾN ĐỔI AFFINE TRONG KHÔNG GIAN ĐỒ HỌA 2D VÀ 3D 4

.I.1 Các phép biến đổi trong không gian hai chiều 4

.I.1.1 Phép tịnh tiến 4

.I.1.2 Phép quay 5

.I.1.3 Phép tỉ lệ 6

.I.1.4 Phép đối xứng 6

.I.2 Tọa độ đồng nhất, kết hợp các phép biến đổi , các phép biến đổi ngược 7

.I.2.1 Tọa độ đồng nhất 7

.I.2.2 Các phép biến đổi ngược 8

.I.2.3 Kết hợp các phép biến đổi trong không gian hai chiều 9

.I.3 Các phép biến đổi trong không gian ba chiều 12

.I.3.1 Phép tịnh tiến 12

.I.3.2 Phép quay 13

.I.3.3 Phép tỉ lệ 19

.I.3.4 Phép đối xứng 19

.I.4 Một ví dụ về phép biến đổi 19

.II THƯ VIỆN OPENGL – CÁC PHÉP BIẾN ĐỔI TRONG OPENGL 20

.III OpenGL là gì ? 20

.III.1.1 OpenGL có thể làm gì và không thể làm gì? 21

.III.1.2 Các tác vụ OpenGL 21

.III.1.3 Hoạt động của OpenGL 21

.III.1.4 Mô hình hoạt động 22

.III.1.5 Yêu cầu hệ thống cho việc dùng OpenGL 23

.III.1.6 Một số thuật ngữ 24

.IV Các phép biến đổi trong Opengl 26

.IV.1.1 Tổng quan 26

.IV.1.2 Phép tịnh tiến - Translate 28

.IV.1.3 Phép xoay – Rotate 29

.IV.1.4 Phép kéo dãn - Scale 30

.IV.1.5 Thứ tự các phép biến đổi 30

.IV.1.6 Phép chiếu phối cảnh và trực giao 32

.IV.1.7 Một số hàm khác của OpenGL được sử dụng trong chương trình 34

.V CÁC THUẬT TOÁN TÌM ĐƯỜNG ĐI 37

Mô tả các thủ tục tìm kiếm rộng, sâu và sâu dần 39

Thuật giải tìm đường đi có giá thành nhỏ nhất 40

Tìm kiếm với tri thức bổ sung 40

Tìm đường đi trên đồ thị tổng quát 42

.VI Mô hình xây dựng từ 3DsMax 43

Trang 9

Định nghĩa về mô hình (module) 43

Dữ liệu module được export từ 3DsMAX 45

OBJ WaveFront Format (file *.obj) 45

Material File Format (*.mtl) 48

BÀI TOÁN VÀ GIẢI THUẬT 53

.I PHÁT BIỂU YÊU CẦU 53

Ý tưởng 53

Thông tin tổng quát 53

Một vài hình ảnh game mẫu 54

.II PHÂN TÍCH VÀ THIẾT KẾ 55

Xây dựng cấu trúc dữ liệu cho các đối tượng trong game 55

Dữ liệu Background 56

Dữ liệu vật lý (Item) 60

Lớp Characters 64

.III CÁC GIẢI THUẬT CHO BÀI TOÁN 66

Thuật toán tìm đường 66

Thuật toán bom nổ 68

Di chuyển cho các nhân vật 69

Xử lý va chạm 70

.IV CẤU TRÚC MODULE CỦA GAME 70

Mô hình chung của một game 70

Khởi tạo – Init() 72

Cập nhật – Update() 72

Vẽ - Paint() 73

Tạm dừng – Pause() 73

Giải phóng bộ nhớ - DTOR 73

Thoát khỏi chương tình – Exit() 74

Phân tích các module cho chương trình 74

Phân tích mô hình dạng chung 74

Chia nhỏ module cho chương trình 75

CÀI ĐẶT CHƯƠNG TRÌNH 77

.I Cài đặt cấu trúc cho game 77

.II Cài đặt di chuyển 79

Cài đặt điều khiển cho nhân vật chính 79

Cài đặt AI cho quái vật 80

.III Cài đặt xử lý bom nổ 81

.IV Xử lý va chạm 82

.V Lớp Character 83

.VI Điều khiển bàn phím 83

.VII Một số hình ảnh trong game 85

KẾT LUẬN 87

.I Kết quả đạt được 87

Đánh giá kết quả 87

Khả năng mở rộng 87

.II Hướng phát triển 88

Trang 10

[1] Dave Astle Kevin Hawkins Beginning OpenGL Game Programming Thomson Course Technology 25 Thomson Place, Boston, MA 2004 http://www.courseptr.com, 337

tr 89

[2] Bùi Minh Trường, Lập trình OpenGl với AUX Trường ĐH Wakayawa Nhật Bản, 114

tr 89

[3] Trang web http://nehe.gamedev.net/ 89

TÓM TẮT LUẬN VĂN TỐT NGHIỆP 90

Trang 11

MỞ ĐẦU

.I Giới thiệu đề tài

Trong quá trình thực tập tốt nghiệp và từ việc tìm hiểu thực tế đã cho thấy cáccông việc hiện nay hầu hết đều gắn liền với máy vi tính Một nhu cầu cần thiết luôn

có sau khi kết thúc những công việc này là việc giải trí trên chính chiếc máy vi tính

mà họ sử dụng cho công việc Việc giải trí có thể như nghe nhạc, xem phim, đọc sách,

… Và có thêm một trò chơi đơn giản nhằm làm phong phú hơn nhu cầu giải trí là mộtđiều cần thiết

.III Nhiệm vụ thực hiện và kết quả cần có

Tìm hiểu về đồ họa 3D và thư viện sẽ sử dụng (Opengl): Hiểu được cơ bảncách thức hoạt động cũng như các phép toán hình học trong không gian (phép xoay,phép chiếu, phép kéo dãn, phép tịnh tiến, …)

Tìm hiểu về cấu trúc một mô hình 3D được tạo bởi 3D-Max: Thực hiện đọc dữliệu từ mô hình và xây dựng hình ảnh 3D từ nó cho chương trình

Giải pháp thuật toán cho chương trình: Cách thức xây dựng chương trình hoànchỉnh và cấu trúc theo module cho chương trình

Trang 12

chương trình thực thi (Ma trận dữ liệu, danh sách liên kết, hàng đợi, …)

Giải pháp xây dựng AI cho chương trình: Dựa vào dữ liệu và thuật toán để xâydựng AI cho game (Tự động di chuyển, tự động tìm đường, đổi hướng, tăng tốc …)

.IV Nội dung thực hiện

Phần 1: Nghiên cứu cơ sở lý thuyết sử dụng cho đề tài

Nội dung nghiên cứu lý thuyết liên quan bao gồm:

Đồ họa 3D với các phép toán Affine

Thư viện đồ họa OpenGL với phép toán Affine

Các lý thuyết về thuật toán tìm đường

Cấu trúc mô hình xây dựng từ 3DsMax

Một số ví dụ tiêu biểu đi kèm

Phần 2: Phát biểu, mô tả đề tài

Phát biểu, mô tả đề tài bao gồm tài liệu đặt tả và tài liệu phân tích thiết kết dựatheo lý thuyết nghiên cứu liên quan

Trình bày hướng giải quyết đề tài, bao gồm thuật toán và các phương pháp lưutrữ dữ liệu

Cách giải quyết các vấn đề nảy sinh trong quá trình thực hiện đề tài

Phân tích cấu trúc chương trình để có thể chia nhỏ chương trình thành nhiềumodule nhằm tạo thuận lợi cho giai đoạn mã hóa chương trình

Phần 3: Mã hóa chương trình

Dựa vào các phân tích, thiết kế và giải thuật cũng như các module đã có ở phần trên

để thực hiện công việc mã hóa

Phần 4: Phần kết luận

Trang 13

So sánh với những gì tham khảo được, đánh giá kết quả mình đã thực hiện baogồm những gì đã hoàn thành, những khó khăn và những gì chưa đạt được Đồng thờitìm đánh giá khả năng mở rộng phát triển của đề tài.

Trình bày một số ví dụ cụ thể để minh họa những gì có thể tiếp tục giải quyếttrong tương lai để phát triển thêm đề tài

Trang 14

mô hình (modeling transformations).Trong không gian đồ họa hai chiều và ba chiều

ta có các phép biến đổi hình học cơ bản là tịnh tiến (translation), phép quay (rotation),phép tỉ lệ (scaling) và phép đối xứng (reflection) Các phép biến đổi khác là trườnghợp đặc biệt hoặc là sự kết hợp của các phép biến đổi trên Trong chương này ta sẽ đềcập đến cơ sở toán học của các phép biến đổi hình học thông qua các phương trìnhđược biểu diễn dưới dạng ma trận tọa độ

.I.1 Các phép biến đổi trong không gian hai chiều

Trang 15

Nếu ta kí hiệu tọa độ các điểm và véc tơ như sau:

khi đó phép tịnh tiến được mô tả bởi phương trình:

Phép tịnh tiến không làm thay đổi hình dạng của vật thể (rigid-body)

.I.1.2 Phép quay

Trong khônggian hai chiều ta xét phép quay vật thể quanh tâm quay (pivotpoint) I(xr,yr) với góc quay θ (θ>0 nếu chiều quay ngược chiều kim đồng hồ và θ<0nếu chiều quay cùng chiều kim đồng hồ)

Trước hết ta xét trường hợp đơn giản nhất đó là phép quay quanh gốc tọa độ,như trong hình

Hình: 2 Phép quay điểm P quanh gốc một góc θ

Ta có các phương trình biến đổi sau:

x'= r cos(Φ+θ)= r cosΦcosθ- r sinΦsinθ

Trang 16

Mặt khác ta lại có x=r cosΦ và y=r sinΦ Thay vào hai phương trình trên ta có:

x'= x cosθ- y sinθy'= x sinθ+ y cosθ

Do đó phép quay được mô tả bởi phương trình

Trường hợp tâm quay I không trùng gốc toạ độ ta sẽ xét sau

Phép quay cũng giống như phép tịnh tiến không làm thay đổi hình dáng của vật thể

.I.1.3 Phép tỉ lệ

Phép tỉ lệ sẽ nhân hoành độ và tung độ ban đầu với hệ số tỉ lệ sx và sy tương ứng, cụ thể ta sẽ có x'= x.sx và y'= y.sy Phương trình của phép biến đổi tỉ lệ có thể được mô ta như sau:

Khi (sx, sy)≠(1, 1) phép biến đổi tỉ lệ sẽ làm thay đổi hình dáng của vật thể Trường hợp đặc biệt: Khi sx=1 và sy=-1 phép tỉ lệ trở thành phép đối xứng Reox quatrục ox, tương tự nếu sx=-1 và sy=1 phép tỉ lệ trở thành phép đối xứng Reoy qua trục

oy

.I.1.4 Phép đối xứng

Ta xét trường hợp phép đối xứng qua một đường thẳng d qua gốc toạ độ và tạovới ox một góc θ như trong hình 3.3.Ta kí hiệu phép biến đổi là Red

Trang 17

Hình: 3 Phép lấy đối xứng điểm P’ của P qua đường thẳng d

Ta có thể thực hiện phép đối xứng trên bằng cách áp dụng liên tiếp các phép biến đổi theo thứ tự sau đây:

(1) Áp dụng phép quay R(-θ) đưa dường thẳng d về vị trí trục ox

(2) Áp dụng phép lấy đối xứng Sox qua trục ox

(3) Áp dụng phép quay R(θ) đưa dường thẳng d về vị trí trí ban đầu

.I.2 Tọa độ đồng nhất, kết hợp các phép biến đổi , các phép biến đổi ngược.

(Homogeneous Coordinates, Inverse Transformations and Composite ransformations)

.I.2.1 Tọa độ đồng nhất

Ta có nhận xét rằng các phép biến đổi mô hình mà ta đã xét đều có thể minhhọa bằng các phương trình ma trận trong đó phép quay và phép tỉ lệ được biểu diễnbằng phép nhân còn phép tịnh tiến được biểu diễn bằng phép cộng Vấn đề đặt ra làkhi ta kết hợp nhiều phép biến đổi với nhau thì ta sẽ không thể biểu diễn thông quamột ma trận tổng thể Giải pháp cho vấn đề đó là sử dụng tọa độ đồng nhất Với tọa

độ đồng nhất ta biểu diễn tọa độ của một điểm (x,y) dưới dạng (xh, yh, h) trong đóx=xh/h và y=yh/h.Với tọa độ đồng nhất ta thấy tọa độ của một điểm có vô số cáchbiểu diễn ứng với các giá trị h khác nhau Để thuận tiện ta sẽ chọn h=1 khi đó điểm

Trang 18

sẽ được biểu diễn hoàn toàn bằng phép nhân ma trận như sau:

Phép tịnh tiến:

Phép quay:

Phép tỉ lệ:

.I.2.2 Các phép biến đổi ngược

Ta sẽ tìm ma trận biết đổi của các phép biến đổi ngược của các phép biến đổi

Trang 19

Tương tự phép biến đổi ngược của phép tỉ lệ với hệ số (sx, sy) là phép biến đổi tỉ lệ với hệ số (1/sx, 1/sy) và ma trận biến đổi là:

.I.2.3 Kết hợp các phép biến đổi trong không gian hai chiều

Sử dụng tọa độ đồng nhất cho phép ta biểu diễn các phép biến đổi mô hình bằng phép nhân ma trận và tìm ma trận biến đổi khi kết hợp các phép biến đổi với nhau

Trang 20

Chứng tỏ: R(θ2).R(θ1)=R(θ1+θ2)

c Kết hợp hai phép tỉ lệ

Tương tự như phép tịnh tiến và phép quay, khi kết hợp hai phép biến đổi tỉ lệ với hệ số là (s1x, s1y) và (s2x, s2y) ta có

d Phép quay quanh một tâm quay bất kì

Trong mục 1.2 ta xét phép quay có tâm là gốc toạ độ, bây giờ ta xét trườnghợp tổng quát khi tâm quay I(xr, yr) không phải là gốc tọa độ như trong hình 3.3 ta kíhiệu phép quay đó là R(xr,yr,θ)

Hình: 4 Phép quay có tâm quay không là gốc tọa độ

Trang 21

Ta có thể thực hiện phép quay trên bằng cách áp dụng liên tiếp các phép biếnđổi theo thứ tự sau đây:

(1) Áp dụng phép tịnh tiến T(-xr, -yr) để tịnh tiến tâm quay về gốc toạ độ (2) Áp dụng phép quay R(θ) quay đối tượng quanh gốc toạ độ một góc θ (3) Áp dụng phép tịnh tiến T(xr, yr) để tịnh tiến tâm quay từ gốc toạ độ về vịtrí ban đầu

R(xr,yr,θ)=T(xr, yr).R(θ).T(-xr, -yr)

e Phép đối xứng qua một đường thẳng bất kì

Trong trường hợp tổng quát nếu trục đối xứng là một đường thẳng d bất kì, tathay phép đối xứng bằng cách áp dụng lần lượt các phép biến đổi sau:

(1) Áp dụng phép tịnh tiến đưa đường thẳng d về vị trí d' đi qua gốc toạ độ (2) Áp dụng phép đối xứng qua đường thẳng d'

(3) Áp dụng phép tịnh tiến đưa đường thẳng d' về vị trí đường thẳng d ban đầu

Trường hợp 1: Đường thẳng d có phương trình y=ax+b, giả sử đường thẳng

cắt trục ox tại điểm (x0, y0) như trong hình

Trang 22

Theo nhận xét ở trên ta có

Red=T(x0, y0) Red' T(-x0, -y0)

(Red' là phép đối xứng qua một đường thẳng chạy qua gốc toạ độ mà ta đã biết

ở trên)

Trường hợp 2: Đường thẳng d có phương trình y=y0 (d song song với trục

ox), khi đó

Red=T(0, y0) Reox T(0, -y0)

Trường hợp 3: Đường thẳng d có phương trình x=x0 (d song song với trục

oy), khi đó

Red=T(x0, 0) Reoy T(-x0, 0)

.I.3 Các phép biến đổi trong không gian ba chiều

Trong không gian ba chiều ta cũng có các phép biến đổi giống như trong khônggian hai chiều Các phép biến đổi sẽ được minh hoạ qua các ma trận 4x4, toạ độ cácđiểm được biểu diễn theo toạ độ đồng nhất nghĩa là thay cho toạ độ (x, y, z) ta sẽdùng (x, y, z, 1)

.I.3.1 Phép tịnh tiến

Giả sử véc tơ tịnh tiến là (tx, ty, tz) khi đó phương trình phép tịnh tiến như sau (T là ma trận của phép tịnh tiến):

Trang 23

Hình: 5 Phép tịnh tiến khối P theo vecto V

.I.3.2 Phép quay

Khi thực hiện phép quay trong không gian ba chiều ta cần phải biết trục quay

và góc quay Chiều của góc quay được xác định theo chiều cùng chiều kim đồng hồ(chiều âm) và ngược chiều kim đồng hồ (chiều dương) khi mắt nhìn dọc theo trụcquay (ta sẽ gọi đó là hướng nhìn) Ví dụ phép quay minh hoạ trên hình 3.6 là phépquay theo chiều dương, trục quay ox và hướng nhìn là theo hướng âm của trục ox

Trang 24

Hình: 6 Phép quay chiều dương, trục quay ox, hướng nhìn là hướng âm trục ox

a Phép quay quanh các trục toạ độ

Trước hết ta xét các phép quay một góc θ theo các trục ox, oy, oz khi hướngnhìn là hướng âm của trục đó

Phép quay quanh trục oz: Ta có thể có công thức biến đổi toạ độ bằng cách mởrộng công thức phép quay trong không gian hai chiều

x'= x cosθ- y sinθ

y'= x sinθ+ y cosθ

z'=z

Biểu diễn tương đương dưới dạng ma trận như sau

Phép quay quanh trục ox:

x'= x

y'= y cosθ- z sinθ

z'= y sinθ+ z cosθ

Trang 25

Phép quay quanh trục oy:

x'= x cosθ+ z sinθ

y'= y

z'= -x sinθ+ z cosθ

b Phép quay quanh một trục song song với trục toạ độ

Giả sử trục quay song song với trục ox (các trường hợp còn lại tương tự), ta thực hiệnlần lượt các lệnh biến đổi sau:

(1) Áp dụng phép tịnh tiến T để đưa trục quay về trục ox

(2) Áp dụng phép quay R(θ) quay đối tượng quanh trục ox một góc θ

(3) Áp dụng phép tịnh tiến T-1 để đưa trục quay về vị trí ban đầu

c Phép quay quanh một trục bất kì

Giả sử trục quay là một đường thẳng d đi qua hai điểm P1(x1, y1, z1) vàP2(x2, y2, z2) Phép quay R(θ) quanh đường thẳng d một góc θ theo hướng nhìn từđiểm P2 tới P1 Ta thực hiện lần lượt các phép biến đổi sau:

(1) Áp dụng phép tịnh tiến đưa trục quay về vị trí đi qua gốc toạ độ

(2) Áp dụng phép quay đưa trục quay về vị trí trùng với một trục toạ độ

(3) Áp dụng phép quay vật thể quanh trục quay (trục toạ độ)

(4) Áp dụng phép quay đưa trục quay về vị trí tại bước 2

(5) Áp dụng phép quay đưa trục quay về vị trí ban đầu Quá trình được minhhoạ trong hình đưới

Trang 26

Hình: 7 Phép quay quanh một trục bất kì

Ta sẽ tìm ma trận biến đổi của từng phép biến đổi theo từng bước

Bước 1: Tịnh tiến đưa điểm P1 về gốc toạ độ bằng cách tịnh tiến theo véc tơ x1, -y1, -z1), đoạn thẳng P1P2 chuyển thành P1'P2' Ma trận phép biến đổi là:

(-Bước 2: Đây là bước phức tạp nhất, đưa trục quay P1'P2' về trùng với một trụctoạ độ, ta sẽ chọn đó là trục oz Để thuận tiện ta sẽ chọn véc tơ đơn vị u thuộc đườngthẳng P1'P2' và có hướng trùng với hướng của véc tơ V=P1'P2' như sau:

Trang 27

Mục đích bây giờ ta phải đưa véc tơ u về trục oz bằng cách áp dụng hai phépquay sau:

(1) Quay một góc α quanh trục ox đưa véc tơ u về vị trí véc tơ u'' nằm trên mặtphẳng xz

(2) Quay một góc β quanh trục oy đưa véc tơ u'' vị trí uz thuộc trục oz Quátrình được minh hoạ trong hình

Hình: 8 Ví dụ về phép quay

Độ lớn của góc α chính bằng góc giữa véc tơ u'(0, b, c) (là hình chiếu của véc

tơ u lên mặt phẳng yz) và chiều dương trục oz, như trong hình dưới

Trang 28

Theo định nghĩa tích có hướng của hai véc tơ ta có:

u'' x uz=uy.||u''||.||uz|| sinβ Mặt khác u'' x uz=uy.(-a) do đó sinβ=-a

Bước 3: Áp dụng phép quay một góc θ quanh trục oz

Bước 4 và bước 5: Áp dụng các phép biến đổi ngược đưa đường thẳng d về vịtrí ban đầu

Tóm lại ta có phương trình ma trận kết hợp các phép biến đổi như sau:

Trang 29

Nếu trục toạ độ là trục đối xứng thì phép đối xứng tương đương với phép quay

1800 quanh trục đó Ví dụ phép đối xứng qua trục ox có ma trận là:

Phép đối xứng qua mặt phẳng xy có ma trận biến đổi là:

Tương tự khi mặt phẳng đối xứng là xz hoặc yz

.I.4 Một ví dụ về phép biến đổi

Về phép biến đổi thực hiện tịnh tiến một điểm P[1,0,0] theo vecto V[1,0,0] rồi xoay

nó quanh trục Oz 90 độ

Trang 30

Theo kết quả ở trên ta sẽ thấy việc thực hiện phép biến đổi phải theo đúng thứ

tự rất quan trọng nếu không sẽ cho kết quả hoàn toàn khác nhau

Trang 31

.III.1.1 OpenGL có thể làm gì và không thể làm gì?

Cung cấp khả năng xử lý các đối tượng 2 và 3 chiều bao gồm ma trận chuyểnđổi, hiệu ứng ánh sáng, chống răng cưa, sương mù, texture và một số chức năng nângcao đối với việc xử lý pixel Tuy nhiên nó không cung cấp phương tiện ở cấp cao để

mô tả hoặc xây dựng kiểu mẫu cho các đối tượng hình học phức tạp Người dùngmuốn làm điều này phải bắt đầu từ các primitive đơn giản (điểm, đoạn, đa giác)

Đôi khi, các lệnh của OpenGL chỉ cho phép ta mô tả sự mong muốn đối vớiviệc các đối tượng xuất hiện như thế nào nhưng không chắc kết quả sẽ chính xác nhưvậy

.III.1.2 Các tác vụ OpenGL

Để yêu cầu OpenGL thực hiện một tác vụ nào đó, chúng ta gọi các hàm Cáchàm sẽ được xử lý đúng theo trình tự gọi và đôi khi có một khoảng thời gian trì trệtrước khi chúng được xử lý Điều này là do một primitive phải được vẽ hoàn tất trướckhi thực hiện tiếp các lệnh gọi sau đó

.III.1.3 Hoạt động của OpenGL

Cơ chế hoạt động của OpenGL là cơ chế ống dẫn (đầu ra giai đoạn trước là đầuvào giai đoạn sau)

Hình: 9 Cơ chế hoạt động đường ống của OpenGL

Display list Là nơi lưu lại một số lệnh để xử lý sau.

Trang 32

đánh giá các đa thức của dữ liệu đưa vào.

Per-vertex operations and primitive assembly xử lý các primitive

(điểm, đoạn, đa giác) được mô tả bởi các vertex Các vertex sẽ được xử

lý và các primitive được cắt xén vào viewport để chuẩn bị cho khâu kếtiếp

Rasterization sinh ra một loạt các địa chỉ framebuffer và các giá trị liên

quan bằng cách sử dụng mô tả 2 chiều của điểm, đoạn, đa giác Mỗiphần tử (fragment ) được sinh ra sẽ đưa vào giai đoạn kế

Per-fragment operations Các tác vụ sau cùng (cập nhật có điều kiện

cho framebuffer dựa vào dữ liệu vào và dữ liệu được lưu trữ trước đócủa giá trị z (đối với z buffering), thực hiện trộn màu cho các pixel vàlàm một số thao tác khác) sẽ được thực hiện trên dữ liệu trước khi nóđược chuyển thành pixel và đưa vào framebuffer

Trường hợp dữ liệu vào ở dạng pixel không phải vertex, nó sẽ được đưa thẳngvào giai đoạn xử lý pixel Sau giai đoạn này, dữ liệu ở dạng pixel sẽ được lưu trữ vàotexture memory để đưa vào giai đoạn Per-fragment operation hoặc được đưa vàoRasterization như dữ liệu dạng vertex

.III.1.4 Mô hình hoạt động

Mô hình diễn dịch các lệnh của OpenGL là mô hình Client/Server Code trongchương trình (client) sẽ đưa ra mệnh lệnh Các mệnh lệnh này sẽ được diễn dịch vàthực thi bởi OpenGL (server) Server có thể không ở chung một máy với client (liênlạc thông qua network) Một server có thể quản lý nhiều ngữ cảnh (context)(tương tựdll), mỗi ngữ cảnh là một trạng thái gói gọn của OpenGL Client có thể nối kết vàomột trong bất kỳ các ngữ cảnh này Giao thức (protocol) yêu cầu có thể là bất cứ giaothức nào sẵn có hoặc sử dụng một giao thức riêng Không có lệnh OpenGL nào đượccung cấp để nhận dữ liệu của người dùng (user input)

Trang 33

Hệ thống điều hành nào cấp phát (allocate) tài nguyên framebuffer sẽ là hệthống cuối cùng điều khiển các hiệu quả tác dụng của các lệnh OpenGL lênframebuffer đĩ:

• Quyết định phần nào của framebuffer mà OpenGL cĩ thể truy xuất tại mộtthời điểm

• Truyền đạt đến OpenGL cấu trúc của caÙc phần đĩ

Khơng cĩ lệnh OpenGL nào cấu hình framebuffer hoặc khởi động OpenGLcũng như quản lý thiết bị hiển thị (việc này do graphic driver làm) OpenGL đượckhởi động khi hệ thống window cấp phát một cửa sổ cho việc thể hiện OpenGL(OpenGL rendering)

Các mode hoạt động

Rendering: là mode bình thường, mặc định mà trong đĩ các fragment

được tạo ra bởi quá trình rasterization

Selection: Người lập trình cĩ thể chọn lựa các primitive để vẽ vào một

vùng nào đĩ của cửa sổ

Feedback: thơng tin về các primitive sắp được raster sẽ được gửi trả về

cho trình ứng dụng

Trong Selection mode và Feedback mode, khơng cĩ fragment nào được tạo ra,

do đĩ khơng cĩ xự sửa đổi nào xảy ra đối với frambuffer

Ba mode trên là loại trừ lẫn nhau

Các mode được chọn lựa thơng qua việc gọi hàm

.III.1.5 Yêu cầu hệ thống cho việc dùng OpenGL

Trang 34

Hệ điều hành: Windows 9x, Windows 2k, Windows NT, XP,…

Khi lập trình (Microsoft VC++) cần có 1 số file: opengl32.dll, opengl32.lib,glu32.dll, glu32.lib, glaux.lib,glu.h, gl.h, glaux.h

.III.1.6 Một số thuật ngữ

Vertex: là một cấu trúc diễn tả cho khái niệm điểm (point) trong không gian 3chiều Có thể thuần túy là điểm, hoặc là đầu của một đoạn thẳng, hoặc là nơi giaonhau của 2 đường thẳng

Pixel: là một khái niệm diễn tả cho đơn vị điểm xuất hiện trên thiết bị đồ họa

(màn hình, giấy in)

Line: xác định bởi 2 Vertex

Triangle: Tập hợp 3 vertex

Primitive: Là 1 đối tượng không gian 3 chiều được định nghĩa bởi một nhóm

các vertex (có thể là điểm, đoạn thẳng, tam giác hoặc đa giác) Trong OpenGLES,primitive giới hạn ở điểm, đoạn thẳng và tam giác

Hình: 10 Ví dụ về các đối tượng hình học

Trang 35

Trong OpenGL hỗ trợ 10 kiểu primitive khác nhau, để có thể xây dựng 1 giaodiện lập trình đồ họa nhẹ, thích hợp với các hệ thống nhúng.

GL_TRIANGLE_STRIP Một dải tam giác được liên kết với nhau

GL_TRIANGLE_FAN Các tam giác liên kết theo hình quạt

Framebuffer: Một cụm gồm mọi buffer của một cửa sổ hoặc ngữ cảnh Đôi

khi bao gồm tất cả bộ nhớ pixel của phần cứng đồ họa

Bitplane: Vùng nhớ chứa 1 bit dữ liệu về pixel (nếu có 8 bitplane lưu trữ các

giá trị về màu sắc thì ta có 256 màu có thể)

Fragment: Dữ liệu đồ họa sinh ra bởi quá trình rasterization các primitive.

Mỗi fragment liên hệ với 1 pixel và bao gồm thông tin về màu sắc, chiều sâu và đôikhi cả giá trị tọa độ texture, nhưng nó chưa được ghi vào các buffer mà còn trải quamột số quá trình khác

Texture: Là một mảng 1 hoặc 2 chiều lưu các giá trị màu (như bitmap).

Texel: Một phần tử của texture.

Raster: chỉ các tác vụ xử lý đối với các GDI primitive chẳng hạn chọn pen,

brush, shape

Rasterization : Sự chuyển đổi các vector graphic (cấu trúc được mô tả thông

qua các mô hình toán chẳng hạn như điểm, đoạn thẳng) thành một hình ảnh biểu hiệnbằng các pixel có thể lưu trữ và xử lý như là chuỗi các bit

Trang 36

về một đối tượng hình học được xây dựng một cách trừu tượng thì dùng vertex, cònkhi nói về một image thì ta dùng pixel)

.IV Các phép biến đổi trong Opengl

.IV.1.1 Tổng quan

Vì OpenGL xây dựng vật thể trên mô hình không gian 3 chiều nên các phépbiến đổi sẽ được thực hiện thông qua việc thực hiện các phép toán trên ma trận Quátrình thực hiện biến đổi sẽ diễn ra như sau: Sau khi ta khai báo vật thể thông qua cácvertex, ta đã có được các điểm trong không gian 3 chiều với tọa độ dưới dạng vector

4 phần tử Để thực hiện di chuyển, quay, phối cảnh, ta cần áp vào các thông số nhưgóc quay, độ di dời, tương ứng với thay đổi muốn thực hiện OpenGL sẽ dùng cácthông số biến đổi mà ta nhập vào (được lưu trữ dưới dạng ma trận 4x4) và thực hiệncác phép toán biến đổi trên các vector nhập vào Kết quả là tọa độ các vertex màchúng ta đã nhập sẽ thay đổi tương ứng

Tại sao là ma trận 4x4 mà không là số khác? Đây là vấn đề toán học; ta cầnbiến đổi vector 4 phần tử nên cần ma trận 4x4 Và lý do dùng vector 4 phần tử là vìOpenGL cần đơn giản các thủ tục tính toán mà việc này chỉ có thể thực hiện vớivector 4 phần tử (hệ tọa độ đồng nhất)

Ghi chú: OpenGL có 3 ma trận 4x4 (tương ứng cho các phép biến đổiViewing-Modeling, Projection, Texture) có vai trò như các bộ đệm để khi chúng ta ápcác phép biến đổi vào, các ma trận này sẽ được biến đổi tương ứng Khi đó tọa độ cácvertex nhập vào sẽ được tính toán, biến đổi dựa vào các ma trận này Do đó, khi cần

vẽ mới (không bị ảnh hưởng bởi các phép biến đổi cũ), ta cần đưa các ma trận này trởvềma trận đơn vị

Để chọn ma trận nào sẽ được thay đổi (muốn thực hiện phép biến đổi nào), tadùng hàm

Void glMatrixMode(GLenum mode);

Trang 37

Mode có thể là:

GL_MODELVIEW Các phép toán ma trận sau đó sẽ tác động

lên ma trận modelview GL_PROJECTION Các phép toán ma trận sau đó sẽ tác động

lên ma trận projection GL_TEXTURE Các phép toán ma trận sau đó sẽ tác động

lên ma trận texture

Sau khi gọi hàm này và đưa tham số tương ứng, ma trận được chọn sẽ trởthành ma trận biến đổi hiện hành và mọi hàm biến đổi tương ứng sẽ tác động lên matrận đó

Để đưa một ma trận biến đổi hiện hành về ma trận đơn vị, dùng hàm:

Do Viewing và Modeling có liên quan tương đối với nhau nên trong OpenGLchúng được gom vào một ma trận biến đổi (chỉ dành cho vật thể) Mặc định ban đầu

là điểm nhìn và vật thể ở chung một chỗ tại gốc hệ trục tọa độ và phương nhìn theohướng âm của trục z (hướng vào bean trong màn hình)

Trang 38

(di chuyển), glRotate*() (quay), glScale*() (dùng để kéo dãn hoặc co nhỏ vật thể).Các hàm này tác động lên tọa độ vật thể.

Hình: 11 Mô tả cho vật thể trong không gian 3 chiều

.IV.1.2 Phép tịnh tiến - Translate

void glTranslate{fd} (TYPE x, TYPE y, TYPE z): dời vật thể đi một đoạn x,

y, và z theo phương các trục tọa độ tương ứng

Ví dụ: glRatated(45,0,0,1);

Trang 39

Hình: 12 Phép tịnh tiến vật thể

.IV.1.3 Phép xoay – Rotate

void glRotate{fd}(TYPE angle, TYPE x, TYPE y, TYPE z): quay vật thể 1

góc angle độ theo chiều ngược chiều kim đồng hồ quanh trục có vector chỉ phươngxác định từ gốc trục toạ độ (0,0,0) và điểm (x,y,z)

Ví dụ: glRatated(45,0,0,1);

Trang 40

.IV.1.4 Phép kéo dãn - Scale

void glScale{fd}(TYPEx, TYPE y, TYPEz): co dãn vật thể theo các phương

Ox, Oy, Oz một lượng tương ứng Nếu x hoặc y hoặc z âm thì vật thể sẽ bị lật lại đốixứng theo trục có độ giãn âm

Ví dụ: glScalef(2.0,-0.5,1.0);

Hình: 14 Phép kéo dãn vật thể

.IV.1.5 Thứ tự các phép biến đổi

Vì các phép biến đổi thực chất là nhân các ma trận với nhau nên thứ tự là quantrọng

GlLoadIdentity() //transform ma trận hiện hành về ma trận đơn vị

Ngày đăng: 15/05/2020, 18:04

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w