1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Nghiên cứu lập trình đồ họa và xây dựng game 3d cho mobile

74 10 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

Tiêu đề Nghiên cứu lập trình đồ họa và xây dựng game 3d cho mobile
Tác giả Trần Đức Huy
Người hướng dẫn Th.S. Trần Uyên Trang
Trường học Trường Đại Học Sư Phạm Đà Nẵng
Chuyên ngành Công Nghệ Thông Tin
Thể loại Luận văn tốt nghiệp
Năm xuất bản 2013
Thành phố Đà Nẵng
Định dạng
Số trang 74
Dung lượng 2,51 MB

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

Nội dung

Có thể dễ dàng nhận thấy, các thiết bị số di động như Smartphone iPhone, Android,…, tablet iPad, iPad mini, các loại máy tính bảng khác,… dần trở thành vật bất ly thân đối với mỗi người,

Trang 1

TRƯỜNG ĐẠI HỌC SƯ PHẠM ĐÀ NẴNG

KHOA TIN HỌC

  

LUẬN VĂN TỐT NGHIỆP

CỬ NHÂN CÔNG NGHỆ THÔNG TIN

KHÓA 2009

NGHIÊN CỨU LẬP TRÌNH ĐỒ HỌA VÀ XÂY DỰNG GAME 3D CHO MOBILE

Giáo viên hướng dẫn : Th.S TRẦN UYÊN TRANG

Sinh viên thực hiện : TRẦN ĐỨC HUY

ĐÀ NẴNG

Trang 2

NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN

Đà Nẵng, ngày …… tháng …… năm 201…

Giáo viên hướng dẫn

Trang 3

NHẬN XÉT CỦA HỘI ĐỒNG XÉT DUYỆT

Đà Nẵng, ngày …… tháng …… năm 201…

Hội đồng xét duyệt

Trang 4

Mục lục

NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN 2

NHẬN XÉT CỦA HỘI ĐỒNG XÉT DUYỆT 3

MỞ ĐẦU 6

Chương 1: CƠ SỞ LÝ THUYẾT 7

1 Khái niệm đồ họa máy tính 7

2 Sự phát triển của đồ họa di động 9

3 Khái niệm cơ bản về 3D 12

3.1 Hệ tọa độ 3 chiều 12

3.2 Vertex (đỉnh) 15

3.3 Edge (cạnh) 15

3.4 Triangle & Quad (Tam giác và các hình đa giác) 16

3.5 Normal Vector (Vector pháp tuyến) 16

3.6 Pixel 17

3.7 Texture & Texel 17

3.8 Fragment 17

3.9 Phép chiếu song song và phép chiếu phối cảnh 18

3.10 Các kênh màu (Color channel) 19

4 Các thư viện đồ họa DirectX, OpenGL và OpenGL ES 2 20

5 Rendering Pipeline (quy trình trình chiếu hình ảnh) 30

6 Shader 33

7 Các khái niệm toán học 3D cơ bản 35

8 Ma trận MVP 40

9 Texture 43

10 Mô hình đối tượng (Model) 44

11 Ngôn ngữ GLSL 45

12 Cấu trúc của một trò chơi (game) 48

13 Giới thiệu về Game Engine 49

Chương 2: PHÂN TÍCH VÀ XÂY DỰNG ĐỀ TÀI 51

1 Giới thiệu đề tài và nội dung game 51

2 Các thành phần gồm có trong game 53

3 Thiết kế các lớp đối tượng 55

4 Chuyển game trên máy tính sang điện thoại 65

5 Một vài hình ảnh demo game 69

Trang 5

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 73 TÀI LIỆU THAM KHẢO 74

Trang 6

MỞ ĐẦU

Ngày nay, sự phát triển bùng nổ của các thiết bị di động đã có tác động không nhỏ tới đời sống chúng ta Có thể dễ dàng nhận thấy, các thiết bị số di động như Smartphone (iPhone, Android,…), tablet (iPad, iPad mini, các loại máy tính bảng khác,…) dần trở thành vật bất ly thân đối với mỗi người, chúng ta sử dụng chúng hầu như khắp mọi nơi, và mọi lúc, khi đi học, tại công sở, khi đi chơi với bạn bè, ở nhà,…

Chính vì sự phổ biến này, kèm theo sự phát triển vượt bậc về công nghệ phần cứng lẫn phần mềm của các thiết bị di động đã biến những chiếc điện thoại chỉ có màn hình trắng đen, nghe gọi nhắn tin ngày xưa trở thành nhưng cỗ máy mạnh mẽ với cấu hình mạnh, hệ điều hành đa nhiệm, đa tác vụ, kết nối internet thường trực 24/24 với các công nghệ 3G, wifi

Nhờ vậy mà nhu cầu giải trí trên các thiết bị cũng ngày một tăng, đồng thời với sự cạnh tranh của các hãng sản xuất thiết bị di động đã cung cấp cho giới lập trình rất nhiều công cụ để hỗ trợ phát triển các sản phẩm công nghệ, giải trí trên các thiết bị

di động, rất nhiều chợ ứng dụng được đầu tư phát triển để đảm bảo đầu ra cho các sản phẩm ứng dụng di động, giúp các lập trình viên dễ dàng kiếm được tiền từ những sản phẩm của mình và dễ dàng đưa sản phẩm của mình ra đến thị trường quốc tế một cách nhanh chóng, mà không cần phải lo nghĩ nhiều cho việc quảng bá sản phẩm hay đau đầu các chiến lược kinh doanh phức tạp

Để nắm bắt xu thế công nghệ thế giới và tận dụng cơ hội lớn này, em cảm thấy cần thiết phải nghiên cứu sâu vào lĩnh vực phát triển ứng dụng di động đầy hấp dẫn này,

vì thế nên em chọn đề tài Nghiên cứu lập trình đồ họa và xây dựng Game 3D cho mobile với mục tiêu là có được cái nhìn toàn diện và hiểu rõ được thế nào là

lập trình đồ họa, game, các công nghệ đằng sau đó, và làm sao để xây dựng cho mình một bộ công cụ mà từ đó có thể sử dụng để xây dựng bất cứ một game nào tùy thích cho các thiết bị di động (iPhone, iPad, Android phone,…) và ứng dụng những kiến thức này xây dựng một game 3D đơn giản lấy đề tài biển đảo Việt Nam với tên

gọi: Game Bảo vệ Hoàng Sa Trường Sa

Trang 7

Chương 1: CƠ SỞ LÝ THUYẾT

Đồ họa máy tính là một lĩnh vực của khoa học máy tính nghiên cứu về cơ sở toán học, các thuật toán cũng như các kĩ thuật để cho phép tạo, hiển thị và điều khiển hình ảnh trên màn hình máy tính Đồ họa máy tính có liên quan ít nhiều đến một số lĩnh vực như đại số, hình học giải tích, hình học họa hình, quang học, và kĩ thuật máy tính, đặc biệt là chế tạo phần cứng (các loại màn hình, các thiết bị xuất, nhập, các vỉ mạch đồ họa )

Theo nghĩa rộng hơn, đồ họa máy tính là phương pháp và công nghệ dùng trong việc chuyển đổi qua lại giữa dữ liệu và hình ảnh trên màn hình bằng máy tính Đồ họa máy tính hay kĩ thuật đồ họa máy tính còn được hiểu dưới dạng phương pháp

và kĩ thuật tạo hình ảnh từ các mô hình toán học mô tả các đối tượng hay dữ liệu lấy được từ các đối tượng trong thực tế Thuật ngữ "đồ họa máy tính" (computer graphics) được đề xuất bởi một chuyên gia người Mĩ tên là William Fetter vào năm

1960 Khi đó ông đang nghiên cứu xây dựng mô hình buồng lái máy bay cho hãng Boeing William Fetter đã dựa trên các hình ảnh 3 chiều của mô hình người phi công trong buồng lái để xây dựng nên mô hình buồng lái tối ưu cho máy bay Boeing Đây là phương pháp nghiên cứu rất mới vào thời kì đó Phương pháp này cho phép các nhà thiết kế quan sát một cách trực quan vị trí của người lái trong khoang buồng lái William Fetter đã đặt tên cho phương pháp của mình là computer graphics

Lịch sử của đồ họa máy tính vào thập niên 1960 còn được đánh dấu bởi dự án SketchPad được phát triển tại Học viện Công nghệ Massachusetts (MIT) bởi Ivan Sutherland Các thành tựu thu được đã được báo cáo tại hội nghị Fall Joint Computer và đây cũng chính là sự kiện lần đầu tiên người ta có thể tạo mới, hiển thị

và thay đổi được dữ liệu hình ảnh trực tiếp trên màn hình máy tính trong thời gian thực Hệ thống Sketchpad này được dùng để thiết kế hệ thống mạch điện và bao gồm những thành phần sau:

 Màn hình CRT

 Bút sáng và một bàn phím bao gồm các phím chức năng

 Máy tính chứa chương trình xử lí các thông tin

Với hệ thống này, người sử dụng có thể vẽ trực tiếp các sơ đồ mạch điện lên màn hình thông qua bút sáng, chương trình sẽ phân tích và tính toán các thông số cần thiết của mạch điện do người dùng vẽ nên

Kỹ thuật đồ họa được liên tục hoàn thiện vào thập niên 1970 với sự xuất hiện của các chuẩn đồ họa làm tăng cường khả năng giao tiếp và tái sử dụng của phần mềm

Trang 8

Sự phát triển vƣợt bậc của công nghệ vi điện tử và phần cứng máy tính vào thập niên 1980 làm xuất hiện hàng loạt các vỉ mạch hỗ trợ cho việc truy xuất đồ họa đi cùng với sự giảm giá đáng kể của máy tính cá nhân làm đồ họa ngày càng đi sâu vào cuộc sống thực tế

Đồ họa máy tính có rất nhiều ứng dụng trong máy tính vì ƣớc tính đến 80% thông tin xử lí là hình ảnh Một số ứng dụng tiêu biểu của đồ họa máy tính nhƣ là:

 Tạo mô hình, hoạt cảnh (game, giải trí, )

 Hỗ trợ thiết kế đồ họa

 Mô phỏng hình ảnh, chuẩn đoán hình ảnh (trong y tế)

Huấn luyện đào tạo ảo (quân sự, hành không, )

Trang 9

2 Sự phát triển của đồ họa di động

Ngày nay, với sự phát triển của các thiết bị di động, sức mạnh đồ họa của các ứng dụng trên di động ngày một phát triển

Ngay từ thời kì đầu tiên, khi mà các thiết bị di động còn sử dụng màn hình trắng đen thì các ứng dụng đồ họa cho điện thoại cũng đã bắt đầu đƣợc đầu tƣ phát triển,

từ mục đích ban đầu là tạo ra các trò chơi giải trí đơn giản nhƣ Snake trên các máy

di động của Nokia

Dần dần về sau, khi công nghệ thay đổi, chất lƣợng màn hình điện thoại ngày một cải tiến, lĩnh vực đồ họa di động lại trỗi dậy với các ứng dụng game có chất lƣợng cao hơn, bên cạnh đó đồ họa cũng góp phần đem lại sự bóng bẩy, hiện đại cho các sản phẩm di động hơn

Game di động vào thời kì màn hình trắng đen năm 1998

Các game 2D J2ME vào thời kì năm 2004

Trang 10

Vào năm 2005, game 3D bắt đầu xuất hiện mặc dù chất lƣợng không cao

Năm 2007, game di động vẫn chƣa có sự đột phá ngoài việc độ phân giải màn hình đƣợc tăng cao hơn giúp hiển thị hình ảnh chi tiết hơn

Năm 2008, iPhone bắt đầu xuất hiện, kéo theo đó là sức mạnh về đồ họa đƣợc nâng cao, chất lƣợng màn hình cảm ứng đột phá đem lại sự thay đổi rõ rệt cho bộ mặt nền game di động

Trang 11

Angry Birds, sản phẩm đầu tiên trên thế giới mở màn cho kỉ nguyên mới trong kinh doanh ứng dụng di động Rovio – hãng sản xuất Angry Birds là một minh chứng cho việc một công ty nhỏ được thành lập chỉ từ 2 đến 3 người có thể nhanh chóng kiếm được hàng triệu đô la và trở thành một tập đoàn lớn chỉ sau một đêm Mở ra một thời kì người người, nhà nhà ôm giấc mơ triệu phú từ kinh doanh ứng dụng di động

Sức mạnh đồ họa của các thiết bị đi dộng ngày càng được cải thiện, và vào năm

2011, Infinity Blade 2 là một trong số rất nhiều game mang chất lượng đồ họa của các game trên máy tính đến điện thoại di động

Trang 12

3 Khái niệm cơ bản về 3D

Để bắt đầu tìm hiểu về lập trình 3D trên máy tính lẫn trên thiết bị đi động, chúng ta cần nắm rõ các khái niệm đồ họa cơ bản trong lập trình 3D, đây là những kiến thức nền tảng để có thể tiếp thu được những kiến thức chuyên môn về sau

Một Hệ tọa độ Descartes xác định vị trí của một điểm (point) trên một mặt phẳng (plane) cho trước bằng một cặp số tọa độ (x, y) Trong đó, x và y là 2 giá trị được xác định bởi 2 đường thẳng có hướng vuông góc với nhau (cùng đơn vị đo) 2 đường thẳng đó gọi là trục tọa độ (coordinate axis) (hoặc đơn giản là trục); trục nằm ngang gọi là trục hoành, trục đứng gọi là trục tung; điểm giao nhau của 2 đường gọi là gốc tọa độ (origin) và nó có giá trị là (0, 0)

Hệ tọa độ này là ý tưởng của nhà toán học và triết học người Pháp René Descartes thể hiện vào năm 1637 trong hai bài viết của ông Trong phần hai của bài Phương pháp luận (Descartes) (tiếng Pháp: Discours de la méthode, tựa Pour bien conduire sa raison, et chercher la vérité dans les sciences), ông đã giới thiệu

ý tưởng mới về việc xác định vị trí của một điểm hay vật thể trên một bề mặt bằng cách dùng hai trục giao nhau để đo Còn trong bài La Géométrie, ông phát triển sâu hơn khái niệm trên

Descartes là người đã có công hợp nhất đại số và hình học Euclide Công trình này của ông có ảnh hưởng đến sự phát triển của ngành hình học giải tích, tích phân, và khoa học bản đồ

Ngoài ra, ý tưởng về hệ tọa độ có thể được mở rộng ra không gian ba chiều (three-dimensional space) bằng cách sử dụng 3 tọa độ Descartes (nói cách khác

là thêm một trục tọa độ vào một hệ tọa độ Descartes) Một cách tổng quát, một hệ tọa độ n-chiều có thể được xây dựng bằng cách sử dụng n tọa độ Descartes (tương đương với n-trục)

Trang 13

Hệ tọa độ trên mặt phẳng 2 chiều (2D)

Là 2 trục vuông góc x'Ox và y'Oy mà trên đó đã chọn 2 vectơ đơn vị i, j sao cho

độ dài của 2 véc-tơ này bằng nhau

Hệ tọa độ trên không gian 3 chiều (3D)

Là 3 trục vuông góc nhau từng đôi một x'Ox, y'Oy, z'Oz mà trên đó đã chọn 3 véc-tơ đơn vị i, j, k sao cho độ dài của 3 véc-tơ này bằng nhau

Trong đồ họa máy tính và di động, tồn tại 2 loại hệ tọa độ không gian 3 chiều Hệ tọa độ tay phải và tay trái Hệ tọa độ tay phải (right handed coordinate system) đƣợc sử dụng trong OpenGL và hệ tọa độ tay trái (left handed coordinate system) đƣợc sử dụng trong DirectX

Trang 14

Hệ tọa độ 3 chiều trong OpenGL

Trong OpenGL thì một điểm trong không gian 3D được đặt trong một vùng có giới hạn giá trị tọa độ từ 0 đến 1 như trong hình bên dưới, gọi là NDC (Normal Device Coordination)

NDC được tổ chức theo hệ tọa độ tay trái và có giới hạn từ điểm (-1, -1, -1) đến (1, 1, 1) Tâm O (0, 0, 0) nằm ở giữa NDC

Tất cả những điểm nằm ngoài phạm vi NDC đều không được hiển thị hay xử lý

Trang 15

Hình tam giác màu đen có gốc xoay đặt tại tâm của hình, trong khi đó hình tam giác màu đỏ có gốc xoay là đỉnh A

Một cạnh là một đoạn thẳng nối liền 2 vertex với nhau

Trang 16

3.4 Triangle & Quad (Tam giác và các hình đa giác)

Polygon/Quad

Một hình đa giác (polygon) là một mặt phẳng được

giới hạn bởi nhiều cạnh (edge) tạo ra từ nhiều đỉnh

(vertex)

Một polygon có 4 cạnh tạo ra từ 4 đỉnh thì được gọi

là một Quad Nhưng thông thường, trong OpenGL

thì một Quad được cấu thành từ 2 tam giác (triangle),

có nghĩa là cần có 5 cạnh (4 đỉnh) tạo thành 2 tam

giác kề nhau để tạo ra 1 quad

Vector normal (vector pháp tuyến) của một mặt phẳng là vector vuông góc với bề mặt của mặt phẳng đó

Trong OpenGL, vector pháp tuyến thường được dùng để xác định hướng của một mặt phẳng và tính toán góc độ phản chiếu ánh sáng trong các kĩ thuật chiếu sáng (lighting)

Thứ tự của các đỉnh trong một tam giác quyết định

hướng của vector normal của mặt phẳng đó

Chỉ những mặt phẳng có vector normal hướng về

phía màn hình mới được hiển thị Các mặt phẳng

có vector normal ngược hướng màn hình đều bị ẩn

đi

Trang 17

Hệ màu RGB chính là hệ màu tổng hợp từ 3 đơn vị màu của 1 pixel

Texture

Texture là một hình ảnh vật liệu đƣợc áp vào một mô hình 3D để tạo nên vẻ

ngoài cho mô hình đó

Texel

Một texture đƣợc tổ chức thành một mảng 2 chiều gồm các pixel, mỗi một pixel trên texture đƣợc gọi là 1 texel

Trang 18

Fragment là các mảnh pixel nằm trên một cạnh (edge) và bên trong một mặt phẳng Hình trên minh họa trình tự chuyển đổi từ 1 vertex sang fragment

Phép chiếu

Phép chiếu là phương pháp thể hiện môi trường 3D trong một mặt phẳng 2D (chiếu lên màn hình) Có rất nhiều phép chiếu hình ảnh, và 2 trong số đó được dùng nhiều nhất là phép chiếu song song và phép chiếu phối cảnh

Phép chiếu song song

Phép chiếu song song (Parallel Projection) là phép chiếu có điểm đặt mắt nhìn ở vô cực, chiếu các đường thẳng thành các đường song song và không tạo ra hiệu ứng chiều sâu về không gian

Phép chiếu phối cảnh

Phép chiếu phối cảnh (Perspective projection) là

phép chiếu sử dụng các đường thẳng đồng tâm,

thể hiện hình ảnh có sự thay đổi kích thước to

nhỏ tùy theo vị trí gần hay xa mắt nhìn, vật càng

xa thì càng nhỏ, tạo ra cảm giác về độ sâu cho

hình ảnh

Trang 19

3.10 Các kênh màu (Color channel)

Mỗi pixel là một tập hợp của 3 màu cơ bản, gọi là các kênh màu, gồm có: Red

(đỏ), Green (xanh lục), Blue (xanh dương) và có thể có thêm kênh Alpha (kênh

diễn tả độ trong suốt của màu – có thể có hoặc không)

Mỗi một kênh màu mang một giá trị từ 0 đến 255, riêng trong OpenGL thì màu

sắc mang giá trị từ 0 đến 1

Hình ảnh sự tổng hợp màu từ các kênh màu

Trang 20

4 Các thư viện đồ họa DirectX, OpenGL và OpenGL ES 2

DirectX

Công nghệ đồ hoạ phát triển nhanh một cách đặc biệt trong lĩnh vực công nghiệp

PC, bằng những Chipset mới, nâng cấp cải tiến Chipset, thậm trí xây dựng lại hoàn toàn công nghệ mới Hiện nay một vấn đề là làm thế nào mà những ứng dụng lại sử dụng được hết những phần cứng 3D mới nhất, những nhà phát triển đã viết những

mã lệnh để dùng được với mọi bộ vi xử lí đồ hoạ ( GPU)

Giải pháp đó là API (Application Programming Interface - Giao diện lập trình ứng dụng) Những API hành động như là vai trò trung gian giữa phần mềm ứng dụng và phần cứng khi nó được kích hoạt Những nhà sản xuất phần mềm viết những mã lệnh mà những đầu ra những dữ liệu đồ hoạ của nó tới API, hơn là trực tiếp tới phần cứng Những nhà sản xuất phần cứng viết Driver, sau đó dịch mã chuẩn này tới định dạng mà mọi phần cứng đều hiểu được

Được giới thiệu lần đầu tiên năm 1995, DirectX là tập lệnh tích hợp của những công

cụ lập trình để giúp những nhà phát triển thực hiện những ứng dụng Multimedia cho nền tảng Windows Nó bao trùm lên hầu hết tất cả những khía cạnh của nội dung Multimedia trong thời gian đó

DirectX 7.0 được giới thiệu lần đầu tiên vào năm 1999 gồm những thành phần chính như sau:

 Direct3D : dùng cho đồ hoạ 3D trong thời gian thực Đồ hoạ 3D là hiển thị những vật thể và những cảnh bằng những thông tin về chiều cao, độ rộng, độ sâu.Những thông tin được tính toán trong hệ thống toạ độ được trình diễn theo ba hướng qua trục : x, y, z

 DirectDraw : dùng để tăng tốc cho những đồ hoạ 2D

 DirectSound : dùng để thu phát âm thanh

 DirectPlay : dùng cho kết nối mạng ( đặc biệt dùng cho nhiều người chơi trên mạng Internet)

 DirectInput : dùng cho Joystick và những thiết bị liên quan

 DirectMusic : dùng cho dữ liệu âm nhạc dựa trên những tin nhắn

DirectX 8.0 phát hành cuối năm 2000, đã kết hợp những thành phần hợp thành DirectSound và DirectMusic để trở thành DirectAudio và tách những chức năng cuối cùng của đồ hoạ 2D và 3D với Direct3D và DirectDraw để hợp thành DirectX

Trang 21

Graphic Nó cũng lấy những thành phần của DirectShow, trước kia thực hiện như là API tách rời, trở thành một thành phần chính thức trong DirectX

Trên thực tế, thành phần DirectDraw chủ yếu thực hiện giao diện Direct3D và Direct3D API sẽ vẫn còn tiếp tục phát triển

Tháng 1 năm 2003, DirectX 9.0 được phát hành, nó cải tiến nhiều việc có ý nghĩa với API bao gồm:

 Khả năng âm thanh mới trong DirectSound

 Tăng tốc phần cứng tái tạo Video trong DirectShow

 Cải tiến khả năng lập trình đồ hoạ mức thấp bằng kiểu lập trình với Vertex Shader và Pixel Shader 2.0

Phiên bản này của API rất nổi tiếng và được Microsoft giới thiệu với tên gọi HLSL (High-Level Shader Language - Ngôn ngữ Shader mức cao)

Phiên bản 9.0 ban đầu của DirectX theo thời gian được nâng cấp và cải tiến để trở thành 9.0a, b và c Những phiên bản này sẽ cải thiện chế độ an ninh, hiệu suất làm việc và sửa lỗi

Hiện nay trong PC có hai giao diện API 3D được sử dụng đó là: OpenGL và Direct3D và chúng đã thống trị được nhiều năm

OpenGL

Được bắt đầu vào năm 1992 do Silicon Graphics (SGI) phát triển cho CAD và 3D API với giao diện X-terminal (Hệ thống cửa sổ được MIT phát triển chạy trong môi trường UNIX và tất cả hệ thống hoạt động chính Nó dùng giao thức Client-Server

và cho phép những người sử dụng chạy những ứng dụng trên những máy tính khác trong mạng và xem bằng màn hình hiển thị của họ) dựa trên Unix OpenGL được phát triển dựa trên thư viện đồ họa của riêng SGI có tên là IrisGL

Ban đầu OpenGL bị hạn chế khi dùng các ứng dụng doanh nghiệp như: công nghiệp, thiết kế máy móc và nội thất, những bài toán phân tích thống kế và khoa học

Tuy nhiên API (Application Programming Interface – Giao diện chương trình ứng dụng, nó là tập hợp những hàm, những thủ tục con mà chương trình hoặc ứng dụng,

có thể gọi để nói cho hệ điều hành thực hiện nhiệm vụ API Windows 95 bao gồm hơn 1000 hàm được viết bằng C, C++, Pascal và những ngôn ngữ lập trình khác có thể gọi để tạo những cửa sổ, mở những File và thực hiện những nhiệm vụ cơ bản khác) được lợi do sự phát triển của Game cùng với sự phát triển của những phiên

Trang 22

bản Windows trong năm 1996, và tất cả những gói 3D của PC chính và thậm trí một

số gói sản phẩm Low-End đều cung cấp để tăng tốc thực hiện OpenGL

Cũng như phần cứng tăng tốc 3D đi vào trong các dòng sản phẩm thông dụng, SGI

đã sửa lại điều khoản bản quyền của mình để làm cho OpenGL được “mở “ nhiều hơn, bằng cách như vậy vị trí của nó được gắn chặt với nền tảng API để xây dựng

sự ảnh hưởng qua lại trong những ứng dụng 2D và 3D

OpenGL API được thiết kế để dùng rộng rãi trong những kĩ thuật đồ hoạ như : Texture Mapping ( khả năng đưa những hình ảnh tới bề mặt đồ hoạ), Anti-Aliasing,

độ trong suốt, sương mù, ánh sáng ( khả năng tính toán màu sắc của bề mặt khi những kiểu sánh sáng khác nhau tới bề mặt từ một hoặc nhiều nguồn sáng), đánh bóng bề mặt ( khả năng tính toán hiệu ứng đánh bóng khi ánh sáng chạm tới bề mặt

ở những góc nhìn khác nhau và kết quả cho sự khác nhau về màu sắc một cách huyền ảo qua bề mặt), vết mờ khi di chuyển và biến đổi hình tượng ( khả năng thay đổi vị trí, kích thước và luật phối cảnh xa gần của vật thể trong không gian toạ độ 3D)

Những đặc điểm của nó cũng tương tự như những gì Direct3D đã làm, nhưng nó là API mức thấp hơn hơn là đối thủ của nó, cung cấp điều khiển rất đẹp lên những thành phần cơ bản của việc tạo ra những cảnh 3D như là Vertext (vị trí không có kích thước trong ba hoặc bốn kích thước không gian mà cắt bởi hai hay nhiều đường – ví dụ như gờ của hình ảnh) và những thông tin về tam giác (hình cơ bản để tạo hình khối trong đồ hoạ 3D)

Trang 23

bố OpenGL dễ dàng hơn để tạo những ứng dụng so với Direct3D và tin cậy hơn với những nền tảng phần cứng khác nhau

Có hai mức độ cơ bản hỗ trợ phần cứng tăng tốc cho OpenGL

 ICD (Installable Client Drivers) tăng nhanh hơn với tính toán ánh sáng, sự biến đổi và Rasterisation ( là sự chuyển đổi của cảnh 3D đa giác, được lưu trữ trong bộ đệm khung hình, thành những hình ảnh đầy đủ với bố cục, độ sâu và ánh sáng

 MCD (Mini Client Servers) hỗ trợ cho Rasterisation

Trong khi MCD được viết dễ dàng từ các nhà sản xuất phần cứng, ISD được dùng

để thực hiện mức cao hơn

Trong năm 1992, ARB (Architecture Review Board) được dùng rộng rãi trong công nghiệp đã chú ý tới sự phát triển và tiến triển của OpenGL để tạo ta những chi tiết

kỹ thuật mới cho API hàng năm Chi tiết kĩ thuật của OpenGL 1.4 và 1.5 được thông báo vào mùa hè năm 2002 và năm 2003 có thêm những tính năng kỹ thuật và những đặc điểm mới Một điều quan trọng, mới đây nhất bao gồm Ngôn ngữ OpenGL Shading, là ngôn ngữ được chờ đợi trong một thời gian dài của API để lập trình Vertex Shader và Pixel Shader, đã được mở rộng và phát triển

Ngôn ngữ OpenGL Shading nhanh chóng trở nên hỗ trợ rộng rãi để phát triển sự tương tác lẫn nhau của đồ hoạ và những ứng dụng hình tượng, được thực hiện trên Unix, Microsoft Windows, Linux và những hệ điều hành khác

Trang 24

Trong năm 2004, phiên bản OpenGL 2.0 được phát hành, nó có những đặc điểm mới bao gồm :

 Lập trình Shading, bằng cả Ngôn ngữ OpenGL Shading và API của nó trở thành nét đặc trưng nhân OpneGL Chức năng mới bao gồm khả năng tạo Shader ( Shader là thuật toán mà mô tả bằng toán học làm thế nào những vật liệu riêng lẻ hoàn trả lại vật thể và ánh sáng tương tác với nhau như thế nào trong sự xuất hiện toàn cảnh) và những vật thể lập trình được ; và khả năng viết Vertex và những đoạn Shader trong Ngôn ngữ OpenGL Shading

 Tái tạo nhiều đích mà cho phép những Shader được lập trình viết những giá trị khác nhau tới nhiều bộ đệm đầu ra

 Hỗ trợ giảm công suất tiêu thụ trên bộ nhớ khi dùng với những bố cục hình chữ nhật

 Tô khuôn hai mặt, có khả năng định nghĩa hàm tô khuôn cho mặt trước và mặt sau của hình gốc ban đầu, cải thiện hiệu suất của khối lượng Shadow và thuật toán xây dựng khối hình học

HAL cung cấp giao diện với khả năng thực hiện rộng rãi trong phần cứng đồ hoạ 3D và cho phép những nhà sản xuất chế tạo những Driver mà liên kết HAL với phần cứng Điều này cho phép những ứng dụng D3D khai thác những tính năng của phần cứng mà không cần những thiết bị chuyên dụng

Trang 25

Direct3D không mềm dẻo hơn OpenGL, mặc dù nó có kiểu lập trình mức thấp với

hy vọng tương đương với đối thủ của mình, có tên gọi Intermediate Mode

Trong D3D quá trình làm việc thông qua Pipeline, hình học của vật thể 3D được CPU xử lí trước khi tới Bộ phận tăng tốc 3D để trình diễn những cảnh 3D trên màn hình Trong năm 1998 - những nhà sản xuất Chip lao vào cuộc đua điên khùng khác

để có quyền dùng Bộ phận tăng tốc 3D nhanh nhất – DirectX 5 nhanh chóng trở nên

bị thắt nút cổ chai trong xử lí 3D Trong tình huống trở nên tồi tệ thì xuất hiện sự ra đời của những Chip 3D thế hệ thứ ba, Microsoft xem xét lại toàn bộ tính toán thay đổi bên ngoài và ánh sáng API của DirectX để nâng cao hiệu suất của xử lí hình học

và cân bằng cấu trúc của hệ thống DirectX 6.0 ( thực tế phát hành lần thứ năm) đã được phát hành vào mùa hè năm 1998 có nhiều tính năng mới để cải thiện trình diễn hình ảnh 3D cho Game và những ứng dụng mô hình khác

Phiên bản 6 thành phần Direct3D hỗ trợ những Card màn hình mới hơn để thực hiện nhiều trình diễn bố cục trong một câu lệnh, giảm thời gian cần để tạo những những cảnh 3D Nó cũng thêm những công nghệ mới để cho những cảnh 3D trông như thật như Anistropic Filtering, Bump Mapping - tạo ảo ảnh của bố cục thực tế và nguồn ánh sáng trên mặt phẳng Khuynh hướng kết hợp của những đặc điểm của OpenGL tiếp diễn để hỗ trợ những phép toán liên quan tới việc tạo khuôn – bằng việc đưa

Trang 26

Do đó, trong cuộc chiến để thống trị đấu trường đồ hoạ 3D cho PC, chúng ta có Direct3D ở một bên, và OpenGL ở một bên khác được các nhà phát triển hỗ trợ mạnh hơn mà không bị ảnh hưởng từ nền tảng Windows Trong quá trình để tạo ra DirectX 7.0 đã xuất hiện một vấn đề mới mà cả Microsoft và SGI đã cùng sản sinh

ra một cái gọi là Fahrenheit Tuy nhiên trong thời gian mà DirectX 7.0 xuất hiện trên thị trường năm 1999, mặc dù vẫn theo trào lưu kết hợp những tính năng của OpenGL, những những khái niệm liên quan tới Fahrenheit đã xuất hiện DirectX 7.0 có những tính năng mới và nhanh hơn phiên bản trước tới 20% Một điều quan trọng trong đó là có sự hỗ trợ của phần cứng tăng tốc T&L (Transformation and Lighting) có trong những Card màn hình 3D hiện thời – và đáng kế là dựa trên GeForce 256 của nVidia và Savage 2000 của S3 Từ khi có T&L, một trong những nhiệm vụ mà tập trung cao độ công suất làm việc của CPU trong những Game thời đó, đã được chuyển giao công việc cho Bộ phận tăng tốc 3D chuyên dụng, để CPU được giải phóng đi làm những công việc khác – như Game kiểu trí tuệ nhân tạo – cho phép những nhà phát triển Game kết hợp tạo được nhiều chi tiết hơn và xử lí nhiều hiệu ứng chuyên dụng hơn

DirectX 8.0, được phát hành cuối năm 2000, đã giới thiệu một số thay đổi quan trọng sau :

 Sự đơn giản hoá giá trị ban đầu và cách sử dụng Direct3D API, sự thích nghi của Direct3D đối với những phiên bản phần cứng mới nhất

 Mở rộng giao diện Direct3D thành công nghệ tăng tốc 3D mới như thể tích kết cấu, nhiều mẫu hình ảnh có sẵn, hỗ trợ T-Buffer

 Giới thiệu nguyên lí xử lí dữ liệu mới : những Shader ( Pixel Shader và Vertex Shader)

Sự thay đổi liên quan tới những Shader cho phép những nhà phát triển thiết kế được linh hoạt hơn và các hình ảnh trông sống động như thật hơn Có hai kiểu lập trình Shader đó là Vertex Shader và Pixel Shader

Những Vertex Shader có thể được dùng cho những hình ảnh động, những bề mặt bên ngoài vật thể, những kiểu ánh sáng mà người dùng định nghĩa, sơ đồ môi trường trung, thủ tục các khối hình học và bất kì thuật toán mà do người phát triển định nghĩa

Những Pixel Shader được lập trình cho phép tạo những hiệu ứng thú vị trong hình ảnh

Vấn đề quan trọng nhất được giới thiệu trong DirectX 9.0, được phát hành tháng Một năm 2003, đó là Ngôn ngữ Shader mức cao HLSL (High-Level Shader Language) của Microsoft

Trang 27

Trước khi có DirectX 9.0, những nhà phát triển Games muốn phát triển những Shader phải dùng ngôn ngữ lập trình mức thấp rất khó khăn và phức tạp HLSL đã thay đổi điều đó, nó được giới thiệu để tạo thành môi trường lập trình thân thiện cho nhà phát triển để dễ dàng thực hiện mọi thao tác để lập trình, từ việc tạo những bức ảnh nghệ thuật sống động tới những hiệu ứng được lập trình Dựa trên ngôn ngữ lập trình C, HLSL tương thích với tất cả những bộ vi xử lí đồ hoạ dựa trên cớ sở DirectX, nó cho phép những nhà phát triển tạo được các hiệu ứng hình ảnh tương tự nhau trên những nền tảng phần cứng khác nhau mà không cần phải lập trình chi tiết cho từng nền tảng một

Fahrenheit

Fahrenheit là một sáng kiến khác của Microsoft và sau này trở thành người sáng lập

đã thay đổi nhanh chóng lĩnh vực công nghệ đồ hoạ Multimedia Nó xuất hiện trong cuộc chiến giữa những API đồ hoạ 3D trong máy tính của Silicon Graphic ( SGI) và Microsoft vào giữa thập kỷ 90 của thế kỷ 20 Trong thời gian đó OpenGL của SGI

đã trở thành chuẩn không thể thiếu được cho việc sử dụng trên những máy trạm và Direct3D 3.0 của Microsoft đang là sơ khai của API 3D cho Windows 95 và lập trình Game

Microsoft có giấy phép OpenGL, để trợ giúp trong việc Windows NT cố gắng kiếm một vị trí với hệ điều hành cho máy trạm Cuối năm 1997, Microsoft nhận thấy đó chỉ là một giải pháp tạm thời và bắt đầu làm việc với SGI trong dự án có tên là Fahrenheit với mục đích cuối cùng là hợp nhất Direct3D và OpenGL thành API mức cao chung cho những đồ hoạ 3D

Fahrenheit đã bao gồm ba thành phần

 Fahrenheit Scene Graph : nó có chức năng tương tự như Retained Mode mức cao của Direct3D Nó cho phép những nhà phát triển tập trung tạo ra toàn cảnh hơn là tạo những hình đa giác riêng biệt

 Được phát hành trong cùng thời gian đó là FLM (Fahrenheit Large Model Visualisation), nó là API mức cao thiết kế cho CAD và những ứng dụng chuyên nghiệp có cấu trúc phức tạp và những bề mặt cong

 Một thành phần quan trọng nhất mà không có lịch trình phát hành trước năm

2000 đó là FLL API (Fahrenheit Low Level API) mà liên quan tới những điều khiển cơ bản của hình học, nó vô cùng quan trọng, được thiết kế để thay thế Immediate Mode của Direct3D và trước đó đã có trong OpenGL

Một số người cho rằng nếu không có sự kết hợp của Microsoft với SGI thì Direct3D không đủ khả năng phát triển tiếp như với ban đầu vốn có của nó Và có điều không

Trang 28

nghi ngờ đó là sự kết hợp giữa hai công ty tạo nên tiền đề cho việc phát triển Game

và những phần mềm chuyên nghiệp

Tuy nhiên, ban đầu Fahrenheit lại đƣợc SGI tập trung và phát triển, cho tới năm

1999 đã trở nên rõ ràng khi Microsoft không có dự định phát hành FLL SGI đã có vấn đề nghiêm trọng đối với những PC chậm nhƣng về sai những Card màn hình cao cấp đang chiếm dần và không lâu sau đã có sự cạnh tranh và đe doạ từ Microsoft Nhƣ chúng ta đã biết, cuối cùng Fahrenhiet đã lụi tàn và chết

OpenGL ES và OpenGL ES 2

OpenGL ES là từ viết tắt của OpenGL for Embedded System (OpenGL dành cho các hệ thống nhúng) là một nhánh phát triển của bộ thƣ viện lập trình OpenGL và đƣợc phát triển dành riêng cho các hệ thống nhúng nhƣ điện thoại di động, các thiết

bị cầm tay kĩ thuật số (PDA, máy tính bảng,…), các máy chơi game (Xbox, PlayStation, Wii, NintendoDS,…)

Ngày nay, OpenGL ES vẫn đƣợc tiếp tục đảm nhiệm phát triển bởi công ty Khronos Group, Inc

Hiện tại đã có rất nhiều phiên bản OpenGL ES đƣợc phát hành OpenGL ES 1.0 phát triển từ nhân của OpenGL 1.3, OpenGL ES 1.1 phát triển từ OpenGL 1.5 và OpenGL ES 2.0 phát triển từ OpenGL 2.0 Điều này có nghĩa là, các ứng dụng OpenGL ES dành cho các thiết bị di động hoàn toàn có thể dễ dàng chuyển đổi để chạy trên máy tính

Trang 29

OpenGL ES 2.0

OpenGL ES 2.0 được phát hành lần đầu tiên vào tháng 3 năm 2007, được xây dựng dựa trên OpenGL 2.0 nhưng lược bỏ đi phần lớn các chức năng dựng hình xây dựng sẵn thuần hàm (fixed-function rendering) và thay bằng phương pháp dựng hình có thể lập trình được giống như OpenGL 3.0 hay 3.1 Điều này có nghĩa là lập trình viên hoàn toàn có thể kiểm soát được quá trình dựng hình của OpenGL ES 2.0, nhờ

đó có thể can thiệp vào và tạo ra những hiệu ứng hay những thay đổi đáng kể giúp tăng hiệu suất và hiệu quả hình ảnh, điều mà không thể làm được với các phiên bản OpenGL ES cũ hơn

Nhưng cũng chính vì điều này nên các ứng dụng xây dựng bằng OpenGL ES 2.0 không thể tương thích ngược với OpenGL ES 1.0

Các thiết bị di động sử dụng OpenGL ES

- Các điện thoại chạy Android 1.6

- iPhone 2, 3G, iPad, iPod Touch

- Các dòng điện thoại BlackBerry

- Các điện thoại Android 2.x

- iPhone 3GS, iPod touch gen 3 trở lên, iPad,…

- BlackBerry OS 7.0 trở lên

- Raspberry Pi

- Google Native Client, WebGL

- Hầu hết các thiết bị ra mắt sau năm 2009 đều hỗ trợ OpenGL ES 2.0

Trang 30

5 Rendering Pipeline (quy trình trình chiếu hình ảnh)

Rendering Pipeline là quá trình diễn ra bên trong GPU, chuyển đổi dữ liệu đồ họa được truyền đến từ RAM từ dạng các đỉnh (vertex) thành các dữ liệu thích hợp để

vẽ ra màn hình

Đầu tiên, dữ liệu của các vertex được truyền từ RAM đến GPU dưới dạng các Vertex Stream có cấu trúc là một mảng các bộ dữ liệu vertex chứa nhiều thuộc tính (Tọa độ, màu sắc, texcord,…)

Sau khi nhận dữ liệu từ các vertex stream, GPU sẽ đọc lấy các thuộc tính về tọa độ của mỗi vertex đó và truyền vào cho Vertex Shader

Vertex Shader có nhiệm vụ đọc các giá trị tọa độ của các vertex và tổng hợp lại thành các hình khối (mỗi hình khối được tạo ra từ nhiều tam giác, mỗi tam giác tạo

ra từ một bộ gồm 3 vertex)

Trang 31

Sau đó đến quá trình Rasterization và Interpolation (suy diễn, nội suy, phân rã) để chuyển các hình khối, mặt phẳng tạo được ở bước trước thành các Fragment (các mảnh pixel)

Tiếp tục đọc dữ liệu từ các stream, lấy ra các giá trị thuộc tính như màu sắc, texture, texcord, các ma trận chiếu và truyền vào Fragment Shader cùng các fragment được phân rã ở trên

Fragment shader sẽ tổng hợp các dữ liệu được truyền lại, thực hiện các phép biến đổi, hòa trộn màu, kiểm tra và lọc các fragment trùng lặp, chồng chéo lên nhau sau

đó sẽ gửi trả dữ liệu lên màn hình để hiển thị

Quá trình Early Depthtest là quá trình xử lý kiểm tra các fragment chồng chéo đè lên nhau nhưng chỉ hỗ trợ ở các dòng GPU như Adreno hay Mali

Depth Test giúp sắp xếp các hình chồng chéo lên nhau theo thứ tự hợp lý

Trang 32

Nếu không có quá trình Depth Test thì khi dựng hình, các hình ảnh có cùng thông

số về độ sâu (trục z) sẽ bị chồng chéo lên nhau dẫn đến các hiện tƣợng nháy, giật,

mất hình Hiện tƣợng này gọi là z-fighting

Trong OpenGL ES 2 thì lập trình viên có nhiệm vụ tự viết code xử lý cho Vertex

Shader và Fragment Shader, nhờ đó có thể chủ động kiểm soát quá trình dựng hình

và vẽ, đem lại sự tùy biến cao nhƣng việc này cũng tốn khá nhiều thời gian và khó

khăn hơn việc sử dụng các hàm dựng sẵn thuần túy của OpenGL ES 1.x

Trang 33

6 Shader

Như đã tìm hiểu ở phần Rendering Pipeline, chúng ta đã biết rằng trong OpenGL

ES 2.0 thì lập trình viên được quyền làm việc trực tiếp với các Shader

Shader là một tập lệnh điều khiển các vertex và fragment được đưa vào tiến trình render

Có 2 loại shader đó là:

- Vertex Shader: shader xử lý dành cho các vertex, thường xử lý các vấn đề liên quan đến tọa độ, vị trí vertex

- Fragment Shader: shader xử lý dành cho các fragment, thường xử lý các vấn

đề liên quan đến màu sắc, texture của fragment

Trong một chương trình OpenGL ES, để có thể sử dụng được Shader thì cần phải thực hiện các bước sau:

- Biên dịch shader: Biên dịch vertex shader và fragment shader, kiểm tra các lỗi cú pháp nếu có

- Gán shader vào một biến chương trình (program) lưu trong bộ nhớ GPU

- Liên kết program đó với chương trình OpenGL ES

- Khi cần sử dụng shader thì sẽ sử dụng program đó để gọi các lệnh xử lý truyền cho GPU

Sơ đồ input và output của các shader

Trang 34

Có 2 thứ cần lưu ý ở Vertex Shader và Fragment shader đó chính là các input và ouput

Vertex Shader nhận vào các giá trị như Thuộc tính (Attribute), Uniform, Texture và trả về 2 giá trị gl_Position (tọa độ của vertex) và gl_PointSize (kích thước)

Các giá trị truyền đi từ Vertex Shader sang Fragment shader được gọi là các varying, thông thường thì các tham số như màu sắc hay texture sẽ được truyền theo dạng varying sang Fragment Shader chứ không xử lý tại Vertex Shader

Fragment Shader nhận các giá trị được gửi đến theo dạng varying từ Vertex Shader

và xử lý, kết quả trả về là một biến gl_FragColor chỉ định màu sắc của từng fragment

Các biến kiểu Uniform là các biến truyền đi từ chương trình và có thể được truy xuất trong cả Vertex Shader lẫn Fragment Shader, vì thế không cần truyền varying các biến Uniform từ Vertex Shader đến Fragment shader

Các biến Thuộc tính (Attribute) truyền vào từ chương trình thì chỉ có thể truy xuất

từ Vertex Shader nên Fragment Shader muốn sử dụng thì phải truyền theo kiểu varying từ Vertex Shader sang

Dưới đây là một chương trình Shader nhỏ:

attribute vec4 a_position;

attribute vec4 a_color;

varying vec4 v_color;

precision lowp float;

varying vec4 v_color;

void main() {

Trang 35

7 Các khái niệm toán học 3D cơ bản

Điểm

Một điểm là một dữ liệu lưu trữ vị trí của một đỉnh Một điểm trong không gian 3D gồm có 3 thành phần: P (x, y, z)

Các phép toán Vector

Độ dài vector (Module)

Độ dài của một vector được tính theo công thức:

Nếu một vector có độ dài là 1 thì đó gọi là vector đơn vị

Normalization (chuẩn hóa)

Gọi N là vector normalize (vector chuẩn hóa) của vector v Ta có:

Trong đó, x’, y’, z’ có giá trị như sau:

Trang 36

Tích vô hướng (Dot product)

Ta có định nghĩa tích vô hướng của 2 vector như sau

Để tính tích vô hướng của 2 vector, ta có công thức

Vector pháp tuyến của 2 vector (Cross product)

Ngày đăng: 09/05/2021, 16:53

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