MỞ ĐẦU 1. Giới thiệu Một Game engine là một phần mềm được viết để thiết kế và phát triển video Game. Có rất nhiều loại Game engine dùng để thiết kế Game cho các hệ máy như hệ consoles hay máy tính cá nhân. Quá trình phát triển Game tiết kiệm được rất nhiều thời gian và kinh phí vào việc tái sử dụng và tái thích ứng một engine để tạo nhiều Game khác nhau.
Tóm lại Game Engine gồm một tập hợp các thành phần khác nhau làm nền tảng tạo nên một Game trên máy tính. Các thành phần cơ bản bao gồm: • Hệ thống toán học. • Hệ thống xử lý tập tin dữ liệu. • Hệ thống hiển thị đồ hoạ.
• Hệ thống quản lý diễn hoạt. • Hệ thống xử lý nhập và xuất. • Hệ thống xử lý các tương tác vật lý. • Hệ thống xử lý trí tuệ nhân tạo.
• Hệ thống xử lý mạng. • Hệ thống tạo hiệu ứng khác như khói lửa, âm thanh, …. Trong các Game khác nhau thì vai trò của các thành phần trên sẽ khác nhau. Thông thường xây dựng Game ta chỉ cần một số trong các thành phần trên mà thôi.
Việc xây dựng và quản lý tất cả các thành phần trên của một Game Engine đòi hỏi Phạm Phương Tú – Lớp 08B1 – Khoa CNTT Trang 13 một lượng lớn thời gian cũng như công sức và đôi khi đòi hỏi nhiều kĩ thuật và kiến thức của nhiều lĩnh vực khác nhau. 3D Engine bao gồm một tập các hệ thống trong Game Engine nhằm giải quyết các vấn đề chính của đồ hoạ 3D là dựng hình 3D. Do đề tài tập trung nghiên cứu và xây dựng một 3D Engine nên em tập trung vào xây dựng hệ thống hiển thị và hệ thống quản lý tập tin. Do 3D Engine là một thành phần đặc trưng của Game Engine nên chúng ta sẽ tìm hiểu về 3D Engine thông qua việc tìm hiểu về Game Engine.
Phạm vi đề tài Đề tài tập trung nghiên cứu vào tìm hiểu về cấu trúc của Game Engine, đưa ra so sánh tại sao không sử dụng các thư viện đồ họa, âm thanh cơ bản mà phải cần dùng tới Game Engine. Tìm hiểu các loại Game Engine khác nhau, đưa ra các so sánh về tưng loại. Tập trung vào việc sử dụng Game Engine Unity. Ý nghĩa về mặt khoa học, đề tài đi theo hướng nghiên cứu tìm hiểu về mặt bản chất của lập trình Game.
Về mặt thực tiễn, chương trình được xây dựng bởi kết quả nghiên cứu của đề tài có thể được sử dụng. Đối tượng tác động nghiên cứu trực tiếp của đề tài chính là Game Engine Unity, là một Game Engine tốt và đang được sử dụng rộng rãi trên thế giới. Do có sự giới hạn trong phạm vi một luận văn, đề tài nghiên cứu này chỉ tiến hành lập trình và cài đặt một số thử nghiệm cơ bản. Hi vọng trong thời gian tới sẽ có những bước tiến xa hơn trong lĩnh vực lập trình Game, tạo nền tảng phát triển tốt để tiếp cận và tìm hiểu về vấn đề này.
Phạm Phương Tú – Lớp 08B1 – Khoa CNTT Trang 14 1. Báo cáo tính khả thi của dự án 1. Khả thi về kĩ thuật Game sử dụng ngôn ngữ lập trình cơ bản là C++ và C Sharp, sử dụng thư viện đồ họa OpenGL là một thư viện đồ họa phổ biến và đã được ứng dụng bên ngoài rộng rãi chưa có trong chương trình giảng dạy chính thức của nhà trường. Khả thi về kinh tế Hai Game minh họa được xây dựng với công cụ lập trình Visual C++ 6.0 và Game Engine Unity, do chương trình minh họa không mang khía cạnh kinh doanh nên việc sử dụng là hoàn toàn miễn phí.
Khả thi về vận hành Chương trình có giao diện trực quan, sử dụng, bên cạnh đó còn có tài liệu hướng dẫn sử dụng chi tiết chỉ cần có kiến thức cơ bản về máy tính là có thể sử dụng được. Chương trình yêu cầu cấu hình máy tính thấp, gần như tất cả các máy tính hiện nay đều có thể đáp ứng. Phạm Phương Tú – Lớp 08B1 – Khoa CNTT Trang 15 CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 2. Xây dựng Game sử dụng thư viện đồ họa cơ bản 2.
Giới thiệu Khi lập trình Game theo đúng nghĩa, tức là không phải dùng phần mềm tạo Game hay dùng một engine nào đó có sẵn, người lập trình chắc chắn phải đụng đến vấn đề lập trình đồ hoạ. Khi đó họ sẽ phải chọn lựa giữa 2 bộ thư viện API đồ họa phổ biến nhất hiện nay, đó là OpenGL và Direct3D. Sử dụng thư viện nào trong hai bộ thư viện này đã và đang luôn luôn là câu hỏi gây nên vô số tranh cãi. Thông thường các lập trình viên thường chia thành hai trường phái đối lập hẳn nhau.
Một số người cho rằng DirectX là con đường duy nhất dẫn đến thành công và số còn lại thì thiên về OpenGL. Thư viện đồ họa OpenGL OpenGL đã được ra đời và phát triển hơn 10 năm nay. Với một thời gian dài như vậy, rõ ràng nó đã chứng tỏ được sự ổn định và giá trị của mình. OpenGL được phát triển bởi SGI từ 10 năm trước, với mục đích là tạo nên một bộ thư viện đồ hoạ ổn định lâu dài và hướng đến tương lai.
Trong 10 năm đó, OpenGL phát triển rất chậm, trong khi tốc độ của các card đồ hoạ bình dân mà chúng ta hiện đang sử dụng đã vượt xa mức tưởng tượng của các nhà phát triển OpenGL 10 năm trước. Với một thực tế như thế, có thể nói thời hoàng kim của OpenGL đã đến và trôi qua từ lâu. Thế nhưng, không phải vì thế mà nói OpenGL không đi kịp thời đại. OpenGL vẫn gắn bó mật thiết với sự phát triển của phần cứng thông qua ARB.
Phạm Phương Tú – Lớp 08B1 – Khoa CNTT Trang 16 Đây là một hội đồng bao gồm các công ty và nhà phát triển phần cứng có liên quan đến đồ hoạ, có thể kể như 3D Lads, SGI, nVidia, ATI, Microsoft, id Software hay Intel nữa. Nhóm này chuyên đưa ra các chuẩn và mở rộng của OpenGL để bộ thư viện này không bị lỗi thời với nhịp đua của thời đại. Có thể nói là các extensions là cầu nối để OpenGL có thể bắt kịp với hiện tại, là những bộ chip xử lý đồ hoạ mới được cập nhật với bao nhiêu chức năng cao cấp, điều mà những người phát triển OpenGL từ thuở sơ khai đã chưa hề tưởng tượng được. OpenGL được phát triển từ lâu, vào thời mà lập trình hướng đối tượng vẫn chưa được thịnh hành, do đó nó đơn thuần chỉ là một bộ thư viện API bao gồm các nhiều hàm đồ hoạ.
OpenGL có khoảng 200 hàm đồ hoạ chuẩn, và khoảng chừng đó số lượng các hàm extensions. Con số này trông có vẻ nhiều, tuy nhiên không thấm vào đâu so với DirectX. Các hàm của OpenGL chỉ thuần tuý là hàm, tức là không dùng class, tuy nhiên bạn có thể tạo class của bạn trên cơ sở các hàm này để tạo nên ứng dụng OpenGL bằng phương pháp lập trình hướng đối tượng của mình. Sử dụng OpenGL như thế nào hoàn toàn tuỳ thuộc vào bạn.
OpenGL có nhiều điểm mạnh vượt trội. Điều đầu tiên có thể nói về OpenGL là tính tương tích của bộ thư viện này rất cao. Bạn có thể sử dụng OpenGL trong hầu hết các hệ khác nhau như Linux, Unix và dĩ nhiên cả Windows. Bất cứ trình dịch bằng ngôn ngữ lập trình nào cũng có thể dùng OpenGL bởi nó được cung cấp dưới dạng API trong các thư viện động dll, và điều quan trọng nhất là các thư viện động này đã được tích hợp sẵn vào Windows.
Bạn không cần cài đặt OpenGL, chỉ cần include file header của OpenGL vào và gọi ra sử dụng. Các hàm và khai báo của OpenGL cũng đặc biệt thân thiện với người sử dụng. OpenGL với sự giúp đỡ của ARB đã bắt kịp với nhịp tiến của các card đồ hoạ mới nhất hiện nay. OpenGL hỗ trợ tất cả những gì Direct3D hỗ trợ, bao gồm cả Pixel Shaders và Vertex Phạm Phương Tú – Lớp 08B1 – Khoa CNTT Trang 17 Shaders, tuy nhiên vẫn cũng chỉ các card mới là có thể dùng được các chức năng này.
Bởi vì ARB bao gồm nhiều công ty khác nhau, trong những ứng dụng khác nhau, nên OpenGL hỗ trợ đồ hoạ mạnh, không những trong Game mà kể cả các ứng dụng như CAD, hay mô phỏng. Tuy nhiên điểm mạnh chủ yếu của OpenGL là nó quá đơn giản. Nhưng đây là một điểm rất hấp dẫn đối với những lập trình viên tầm trung, muốn tìm kiếm một thư viện nhanh, hiệu quả và dễ học. Viết code bằng OpenGL thường làm cho chương trình đơn giản, sáng sủa và dễ debug bởi lý do này.
Ngoài ra, OpenGL còn che dấu toàn bộ quá trình rendering pipeline phức tạp của nó, do đó bạn không cần quan tâm đến cấu trúc hay chi tiết của nó như Direct3D. Khởi tạo OpenGL chỉ cần khoảng 20 dòng code, thay vì vài trăm như Direct3D. Thế nhưng cũng như Direct3D, điểm yếu của OpenGL nằm ngay ở các điểm mạnh trên. Việc các hàm OpenGL không đi sâu vào, tuy nhiên nếu khi cần đi vào những chi tiết này thì mới thực sự là ác mộng.
Bạn không thể can thiệp vào rendering pipeline của OpenGL đơn giản bởi vì nó không cho phép. Điều này làm cho một số hiệu ứng trở nên khó xử lý với OpenGL, trong khi Direct3D cho phép thực hiện dễ dàng. OpenGL dùng cầu nối là các extensions, tuy nhiên do các thành viên của ARB có nguồn gốc từ nhiều công ty khác nhau, vì vậy họ thường không đưa ra được một chuẩn chung, cùng một hàm Pixel Shaders, nVidia đưa ra một hàm, ATI đưa ra một hàm, tên khác nhau, nhận biến khác nhau, và quan trọng là card đồ họa của hãng nào chỉ hỗ trợ extensions của hãng nấy. Vậy là nếu muốn sử dụng chức năng này, ta phải kiểm tra xem card đồ họa của máy người dùng là card đồ họa gì rồi chạy mã lệnh tương ứng.
Điều này cũng làm cho việc sử dụng các extensions không được phổ biến lắm, ngoại trừ các nhà phát triển gạo cội như id Software hoặc các chương trình kiểm tra card đồ họa mà thôi. Phạm Phương Tú – Lớp 08B1 – Khoa CNTT Trang 18 Tuy tên hàm của OpenGL được đặt khá thân thiện, tuy nhiên điều này cũng gây ra ít nhiều phiền toái. Cùng một hàm khai báo màu cho vertex đang xài mà có đến glColor3f, glColor3ub, glColor3b, glColor3fv, glColor4f,… Tổng cộng có đến 32 hàm có mang chuỗi glColor. Tuy nhiên điều này cũng có thể giải quyết được bằng cách overload các hàm cùng tên, việc mà hầu hết các ngôn ngữ OOP đều support.