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

Nghiên cứu và xây dựng game 3d trên nền đồ họa open GL

76 113 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 xây dựng game 3d trên nền đồ họa opengl
Tác giả Phan Ngọc An
Người hướng dẫn ThS. GV. Nguyễn Thanh Tuấn
Trường học Đại học Đà Nẵng
Chuyên ngành Khoa Tin
Thể loại Khóa luận tốt nghiệp
Năm xuất bản 2012
Thành phố Đà Nẵng
Định dạng
Số trang 76
Dung lượng 2,27 MB

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

Cấu trúc

  • 1. Đặt vấn đề (8)
  • 2. Lý do chọn đề tài (0)
  • 3. Mục đích nghiên cứu (9)
  • 4. Nội dung khóa luận (9)
  • 5. Đối tượng và phạm vi nghiên cứu (10)
    • 4.1. Đối tượng nghiên cứu (10)
    • 4.2. Phạm vi nghiên cứu (10)
  • 6. Phương pháp nghiên cứu (10)
  • 7. Công cụ sử dụng (10)
  • Chương 1 GIỚI THIỆU VỀ CÔNG CỤ SỬ DỤNG (11)
    • 1.1. Ngôn ngữ lập trình (11)
    • 1.2. Visual C++ (11)
    • 1.3. Thư viện đồ họa OpenGL (Open Graphics Library) (0)
    • 1.4. Ngôn ngữ mô hình hóa thống nhất UML (Unified Modeling Language) (12)
      • 1.4.1. Giới thiệu (12)
      • 1.4.2. Các bước phân tích và thiết kế hướng đối tượng (0)
  • Chương 2 CƠ SỞ LÝ THUYẾT (17)
    • 2.1. Các vấn đề quan trọng trong lập trình 3D (0)
      • 2.1.1. Khái niệm về 3D (0)
      • 2.1.2. Các hệ trục tọa độ (0)
      • 2.1.3. Xác định vị trí một điểm trong hệ tọa độ 3D (0)
      • 2.1.4. Các mô hình 3D (20)
      • 2.1.5. Các hình dạng 3D (21)
      • 2.1.8. Các phép chiếu trong 3D (27)
      • 2.1.9. Kỹ thuật gắn kết cấu (texture mapping) (29)
      • 2.1.10. Loại bỏ mặt sau (backface culling) (31)
      • 2.1.11. Hộp biên (Bounding Boxes) (31)
    • 2.2. Thư viện đồ họa OpenGL (0)
      • 2.2.1. Cơ bản về OpenGL (0)
      • 2.2.2. Các kỹ thuật cơ bản trong Open GL (36)
    • 2.3. Kiến thức cơ bản về lập trình Game (48)
      • 2.3.1. Vòng lặp game (Game Loop) (48)
      • 2.3.2. Khung hình (Frame) (50)
      • 2.3.3. FPS (Frame Per Second) (50)
      • 2.3.4. Bộ nhớ (Memory) (51)
      • 2.3.5. Game AI (Artifical Intelligent) (51)
      • 2.3.6. Tương tác vật lý (game physics) (52)
      • 2.3.7. Âm thanh (sound) (52)
      • 2.3.8. Trạng thái game (State) (53)
  • Chương 3 PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG (54)
    • 3.1. Xây dựng kịch bản cho game Warship (0)
    • 3.2. Phân tích hệ thống (0)
      • 3.2.1. Yêu cầu đặt ra đối với chương trình (54)
      • 3.2.2. Mô tả chi tiết các chức năng (56)
    • 3.3. Thiết kế hệ thống (0)
      • 3.3.1. Xây dựng kết cấu tổng thể của hệ thống (0)
      • 3.3.2. Mô hình hoạt động của chương trình (67)
  • Chương 4 CÀI ĐẶT VÀ KẾT QUẢ CHƯƠNG TRÌNH (69)
    • 4.1. Cài đặt chương trình (69)
      • 4.1.1. Load model *.obj (69)
      • 4.1.2. Thuật toán đồng bộ hóa frame (71)
      • 4.1.3. Thuật toán di chuyển ngẫu nhiên cho tàu chiến (72)
    • 4.2. Kết quả chương trình (73)
      • 4.2.1. Màn hình menu chính của game (73)
      • 4.2.2. Màn hình chính trong game (74)
    • 1. Kết quả đạt được (75)
      • 1.1. Về lý thuyết (75)
  • TÀI LIỆU THAM KHẢO (76)

Nội dung

Mục đích nghiên cứu

Củng cố kiến thức đã học và mở rộng hiểu biết về lập trình đồ họa với thư viện OpenGL, cũng như nghiên cứu quy trình và công nghệ phát triển game 3D.

 Nắm rõ quy trình phát triển game cũng như các công cụ được sử dụng để sản xuất một sản phẩm game

 Áp dụng lập trình hướng đối tượng và ngôn ngữ C++ để phát triển game với phần mềm visual studio C++ 2008

 Xây dựng game 3D Warship với nhiều chức năng lựa chọn, đồ họa thẩm mỹ nhằm cuốn hút sự quan tâm của người chơi.

Nội dung khóa luận

Nội dung khóa luận được chia làm 3 phần cụ thể như sau:

 Tổng quan về đề tài

Bài viết này trình bày nội dung nghiên cứu và giải pháp thực hiện qua bốn chương chính Chương 1 giới thiệu về công cụ sử dụng, bao gồm ngôn ngữ lập trình và trình biên dịch, cùng với các ưu và nhược điểm của chúng trong lập trình game Chương 2 tập trung vào cơ sở lý thuyết, nêu bật các vấn đề quan trọng trong lập trình 3D và việc sử dụng thư viện đồ họa OpenGL Chương 3 phân tích và thiết kế hệ thống, mô tả kịch bản game và xây dựng các chức năng cùng thiết kế module cho chương trình Cuối cùng, Chương 4 trình bày việc cài đặt chương trình, các thuật toán được sử dụng và kết quả demo của chương trình.

 Kết luận và hướng phát triển

Phương pháp nghiên cứu

 Nghiên cứu lý thuyết xây dựng game 3D nhằm đưa ra một số định hướng phát triển đề tài

 Trong quá trình nghiên cứu về lý thuyết thì luôn xây dựng chương trình thực hành để tìm hiểu rõ về bản chất của lý thuyết.

Công cụ sử dụng

 Phần mềm Microsoft visual studio 2008 (dùng để compile code C++ của chương trình)

 Phần mềm Autodesk 3ds Max (dùng để chỉnh sửa model 3D)

 Thư viện đồ họa mã nguồn mở OpenGL

 Ngôn ngữ cài đặt: Cài đặt chương trình bằng ngôn ngữ C++ trên window 7

 Phân tích và thiết kế hướng đối tượng sử dụng UML

NỘI DUNG NGHIÊN CỨU VÀ GIẢI PHÁP THỰC HIỆN

GIỚI THIỆU VỀ CÔNG CỤ SỬ DỤNG

Ngôn ngữ lập trình

Game có thể được lập trình bằng nhiều ngôn ngữ khác nhau, tùy thuộc vào nhu cầu và sở trường của người phát triển Hiện nay, có một số xu hướng nổi bật trong việc lựa chọn ngôn ngữ lập trình cho game.

 Java: Thường dùng viết game cho mobile - các dòng phone hỗ trợ J2ME, hoặc viết game cho Android Ít khi dùng để viết game cho PC

 C#: Khi nhắc tới C#, ta có thể nghĩ ngay đến XNA, và gắn liền với thương hiệu Microsoft Dùng viết game cho windows mobiles hoặc PC

 Javascript: Dùng cho môi trường web

 Objective C: Dùng cho iOS như máy MAC, iPhone, iPad

C/C++ là ngôn ngữ lập trình cơ bản, được giảng dạy rộng rãi trong các chương trình đào tạo đại học, và hầu hết lập trình viên đều đã tiếp xúc ít nhất một lần Ngôn ngữ này rất phổ biến trong lập trình game nhờ vào khả năng thực thi nhanh, dễ điều khiển và hỗ trợ trên nhiều nền tảng như Windows, Linux, MacOS, Android, iPhone/iPad, Symbian, Brew, và Meegoo Với những ưu điểm vượt trội của C++ trong lĩnh vực lập trình game, tôi đã quyết định chọn C++ để phát triển chương trình của mình.

Visual C++

Visual C++ là một công cụ lập trình mạnh mẽ trong Microsoft Visual Studio, hỗ trợ ngôn ngữ C/C++ và cho phép lập trình viên phát triển ứng dụng trên hệ điều hành Windows, bao gồm cả ActiveX và thư viện DLL Với nhiều công cụ thiết kế giao diện và kiểm tra lỗi, Visual C++ giúp tăng tốc độ phát triển dự án, nhanh hơn gấp rưỡi đến gấp đôi so với Java Sự linh hoạt với thư viện hàm và đối tượng phong phú, cùng với hệ thống thư viện trực tuyến MSDN, làm cho Visual C++ trở thành lựa chọn thân thiện và dễ sử dụng cho lập trình viên.

1.3 Thư viện đồ họa OpenGL (Open Graphics Library)

OpenGL là thư viện đồ họa mã nguồn mở, định nghĩa giao diện lập trình ứng dụng đồ họa 3 chiều và cũng hỗ trợ đồ họa 2 chiều Với khoảng 250 hàm, OpenGL cho phép tạo ra các cảnh phức tạp từ những hàm đơn giản Thư viện này được sử dụng rộng rãi trong lập trình game, cũng như trong các ứng dụng mô phỏng khoa học và phát triển trò chơi.

1.4 Ngôn ngữ mô hình hóa thống nhất UML (Unified Modeling Language) 1.4.1 Giới thiệu

UML (Unified Modeling Language) là ngôn ngữ mô hình hóa tổng quát được thiết kế để mô tả và phát triển tài liệu cho các khía cạnh trong phát triển phần mềm hướng đối tượng Nó giúp các nhà phát triển hiểu rõ hơn về phần mềm cần xây dựng và đưa ra quyết định chính xác UML bao gồm các khái niệm, ký hiệu, biểu đồ và hướng dẫn, hỗ trợ việc xây dựng hệ thống hướng đối tượng bằng cách nắm bắt cấu trúc tĩnh và hành vi động của hệ thống.

 Các cấu trúc tĩnh định nghĩa các kiểu đối tượng quan trọng của hệ thống, nhằm cài đặt và chỉ ra mối quan hệ giữa các đối tượng đó

 Các hành vi động định nghĩa các hoạt động của các đối tượng theo thời gian và tương tác giữa các đối tượng hướng tới đích

Dựa trên tính chất của các biểu đồ, UML chia các biểu đồ thành hai lớp mô hình:

 Biểu đồ mô hình cấu trúc (Structural Modeling Diagrams): Biểu diễn cấu trúc tĩnh của hệ thống phần mềm được mô hình hóa

Biểu đồ mô hình hành vi (Behavioral Modeling Diagrams) giúp nắm bắt các hoạt động và hành vi của hệ thống, đồng thời thể hiện sự tương tác giữa các phần tử bên trong và bên ngoài hệ thống.

Biểu đồ đối tượng (Objects diagram)

Biểu đồ triển khai (Devloyment)

Biểu đồ lớp (Class diagram)

Biểu đồ thành phần (Component)

Biểu đồ mô hình cấu trúc

Hình 1 1 Biểu đồ mô hình cấu trúc

Mục đích của ngôn ngữ mô hình hóa thống nhất UML:

 Mô hình hóa các hệ thống sử dụng các khái niệm hướng đối tượng

 Thiết lập sự liên hệ từ nhận thức của con người đến các sự kiện cần mô hình hóa

 Giải quyết các vấn đề ở mức độ thừa kế trong các hệ thống phức tạp với nhiều ràng buộc khác nhau

UML là một ngôn ngữ mô hình hóa mạnh mẽ, cung cấp các ký hiệu và quy tắc để mô hình hóa các giai đoạn trong quy trình phát triển phần mềm hướng đối tượng thông qua các biểu đồ.

Công cụ để vẽ và thiết kế các sơ đồ UML trong đề tài này em sử dụng là phần mềm Software Ideas Modeler

Biểu đồ hợp tác () (Collaboration)

Biểu đồ hoạt động (Activity)

Biểu đồ trạng thái (Statechart)

Biểu đồ mô hình hành vi (Behavioral Modeling Diagrams)

Biểu đồ use case (Use case)

Hình 1 2 Biểu đồ mô hình hành vi

Các bước phân tích và thiết kế hướng đối tượng được thực hiện dựa trên biểu đồ ký hiệu UML, một ngôn ngữ mô hình hóa thống nhất UML được xây dựng nhằm mô hình hóa quy trình phát triển hệ thống phần mềm theo hướng đối tượng.

Xây dựng biểu đồ use case là quá trình xác định các tác nhân, use case và mối quan hệ giữa chúng dựa trên yêu cầu ban đầu, nhằm mô tả chức năng của hệ thống Một yếu tố quan trọng trong biểu đồ này là các kịch bản, thể hiện hoạt động của hệ thống trong từng use case cụ thể.

Xây dựng biểu đồ lớp: Xác định tên các lớp, các thuộc tính của lớp, một số phương thức và mối quan hệ cơ bản trong sơ đồ lớp

Xây dựng biểu đồ trạng thái: Mô tả các trạng thái và chuyển tiếp trạng thái trong hoạt động của một đối tượng thuộc một lớp nào đó

Hình 1 3 Các bước phát triển hệ thống hướng đối tượng

Xây dựng biểu đồ tương tác, bao gồm biểu đồ hợp tác và biểu đồ tuần tự, là bước quan trọng trong việc mô tả chi tiết hoạt động của các use case dựa trên các kịch bản đã xác định trong giai đoạn phân tích.

Để xây dựng biểu đồ lớp chi tiết, cần hoàn thiện biểu đồ bằng cách bổ sung các lớp còn thiếu Việc này dựa trên biểu đồ trạng thái để thêm các thuộc tính cần thiết và sử dụng biểu đồ tương tác để xác định các phương thức cũng như mối quan hệ giữa các lớp.

Biểu đồ hoạt động là công cụ quan trọng để mô tả các phương thức phức tạp trong từng lớp hoặc các hoạt động của hệ thống liên quan đến nhiều lớp Nó đóng vai trò là nền tảng cho việc cài đặt các phương thức trong các lớp, giúp cải thiện khả năng hiểu và quản lý quy trình trong phát triển phần mềm.

Xây dựng biểu đồ thành phần: Xác định các gói, các thành phần và tổ chức phần mềm theo các thành phần đó

Để xây dựng biểu đồ triển khai hệ thống, cần xác định rõ các thành phần và thiết bị cần thiết, cũng như các giao thức và dịch vụ hỗ trợ cho việc triển khai hệ thống.

Ngôn ngữ mô hình hóa thống nhất UML (Unified Modeling Language)

UML (Ngôn ngữ Mô hình hóa Tổng quát) là công cụ quan trọng trong việc mô tả, phát triển và viết tài liệu cho phần mềm hướng đối tượng Nó giúp các nhà phát triển nắm bắt và đưa ra quyết định chính xác liên quan đến phần mềm cần xây dựng UML bao gồm các khái niệm, ký hiệu, biểu đồ và hướng dẫn, hỗ trợ việc xây dựng hệ thống hướng đối tượng thông qua việc hiểu rõ cấu trúc tĩnh và hành vi động của hệ thống.

 Các cấu trúc tĩnh định nghĩa các kiểu đối tượng quan trọng của hệ thống, nhằm cài đặt và chỉ ra mối quan hệ giữa các đối tượng đó

 Các hành vi động định nghĩa các hoạt động của các đối tượng theo thời gian và tương tác giữa các đối tượng hướng tới đích

Dựa trên tính chất của các biểu đồ, UML chia các biểu đồ thành hai lớp mô hình:

 Biểu đồ mô hình cấu trúc (Structural Modeling Diagrams): Biểu diễn cấu trúc tĩnh của hệ thống phần mềm được mô hình hóa

Biểu đồ mô hình hành vi (Behavioral Modeling Diagrams) giúp nắm bắt các hoạt động và hành vi của hệ thống, đồng thời thể hiện sự tương tác giữa các phần tử bên trong và bên ngoài hệ thống.

Biểu đồ đối tượng (Objects diagram)

Biểu đồ triển khai (Devloyment)

Biểu đồ lớp (Class diagram)

Biểu đồ thành phần (Component)

Biểu đồ mô hình cấu trúc

Hình 1 1 Biểu đồ mô hình cấu trúc

Mục đích của ngôn ngữ mô hình hóa thống nhất UML:

 Mô hình hóa các hệ thống sử dụng các khái niệm hướng đối tượng

 Thiết lập sự liên hệ từ nhận thức của con người đến các sự kiện cần mô hình hóa

 Giải quyết các vấn đề ở mức độ thừa kế trong các hệ thống phức tạp với nhiều ràng buộc khác nhau

UML là một ngôn ngữ mô hình hóa mạnh mẽ, cung cấp các ký hiệu và quy tắc để mô hình hóa các giai đoạn trong quy trình phát triển phần mềm hướng đối tượng thông qua các biểu đồ.

Công cụ để vẽ và thiết kế các sơ đồ UML trong đề tài này em sử dụng là phần mềm Software Ideas Modeler

Biểu đồ hợp tác () (Collaboration)

Biểu đồ hoạt động (Activity)

Biểu đồ trạng thái (Statechart)

Biểu đồ mô hình hành vi (Behavioral Modeling Diagrams)

Biểu đồ use case (Use case)

Hình 1 2 Biểu đồ mô hình hành vi

Các bước phân tích và thiết kế hướng đối tượng dựa trên biểu đồ ký hiệu UML, một ngôn ngữ mô hình hóa thống nhất UML được phát triển nhằm mô hình hóa quá trình phát triển hệ thống phần mềm hướng đối tượng.

Xây dựng biểu đồ use case là quá trình xác định các tác nhân, use case và mối quan hệ giữa chúng dựa trên yêu cầu ban đầu, nhằm mô tả chức năng của hệ thống Một yếu tố quan trọng trong biểu đồ use case là các kịch bản, thể hiện hoạt động của hệ thống trong từng use case cụ thể.

Xây dựng biểu đồ lớp: Xác định tên các lớp, các thuộc tính của lớp, một số phương thức và mối quan hệ cơ bản trong sơ đồ lớp

Xây dựng biểu đồ trạng thái: Mô tả các trạng thái và chuyển tiếp trạng thái trong hoạt động của một đối tượng thuộc một lớp nào đó

Hình 1 3 Các bước phát triển hệ thống hướng đối tượng

Xây dựng biểu đồ tương tác, bao gồm biểu đồ hợp tác và biểu đồ tuần tự, là bước quan trọng trong việc mô tả chi tiết hoạt động của các use case Quá trình này dựa trên các kịch bản đã có và các lớp đã được xác định trong giai đoạn phân tích.

Để xây dựng biểu đồ lớp chi tiết, cần tiếp tục hoàn thiện bằng cách bổ sung các lớp còn thiếu Việc này dựa trên biểu đồ trạng thái để thêm các thuộc tính cần thiết, đồng thời sử dụng biểu đồ tương tác để xác định các phương thức và mối quan hệ giữa các lớp.

Biểu đồ hoạt động là công cụ mô tả rõ ràng các phương thức phức tạp trong từng lớp và các hoạt động liên quan giữa nhiều lớp trong hệ thống Nó đóng vai trò quan trọng trong việc cài đặt các phương thức, giúp đảm bảo tính nhất quán và hiệu quả trong quá trình phát triển phần mềm.

Xây dựng biểu đồ thành phần: Xác định các gói, các thành phần và tổ chức phần mềm theo các thành phần đó

Xây dựng biểu đồ triển khai hệ thống là bước quan trọng để xác định các thành phần và thiết bị cần thiết cho việc triển khai hệ thống Đồng thời, cần chú ý đến các giao thức và dịch vụ hỗ trợ nhằm đảm bảo hệ thống hoạt động hiệu quả.

CƠ SỞ LÝ THUYẾT

Kiến thức cơ bản về lập trình Game

2.3.1 Vòng lặp game (Game Loop)

Hầu hết các chương trình truyền thống như Word chỉ phản hồi theo thông điệp mà người dùng nhập vào, nghĩa là nếu không có đầu vào, chương trình sẽ không thực hiện hành động nào Ngược lại, trong các chương trình game, dù người dùng có nhập thông điệp hay không, chương trình vẫn hoạt động theo một cấu trúc đã được lập trình sẵn.

Tất cả các trò chơi đều thực hiện một chuỗi công việc lặp đi lặp lại, bao gồm việc nhận input từ người dùng, cập nhật trạng thái game, xử lý trí tuệ nhân tạo, phát âm thanh và hiển thị đồ họa trên màn hình Những công việc này được thực hiện trong một vòng lặp gọi là game loop, tạo nên cấu trúc chính cho hoạt động của trò chơi.

Game loop là thành phần thiết yếu trong mọi trò chơi, không thể thiếu để đảm bảo sự hoạt động liên tục Nó giúp duy trì sự ổn định của game, không bị ảnh hưởng bởi các tác động từ người dùng.

Hình 2 28 Một vòng lặp game đơn giản

Các vòng lặp game có thể thay đổi nhờ sự phát triễn của game nhưng hầu hết chúng đều dựa trên ý tưởng cơ bản này

Vòng lặp của game thay đổi theo từng nền tảng phát triển, được thực hiện thông qua hai hàm chính là Update và Render Cấu trúc vòng lặp thường có dạng: bool game_is_running; while(game_is_running) { }.

Trong lĩnh vực đồ họa 2D, khái niệm sprite bao gồm nhiều hình ảnh khác nhau, mỗi hình ảnh được gọi là một frame Ngược lại, trong đồ họa 3D, model cũng bao gồm nhiều frame, nhưng mỗi frame lại là một tập hợp các điểm tọa độ dùng để vẽ Frame có thể được hiểu là một hình ảnh toàn màn hình, bao gồm tất cả các frame của model, frame của sprite, và các yếu tố khác như văn bản, tức là tất cả những gì được hiển thị trên màn hình.

FPS, hay số khung hình được vẽ trong một giây, đóng vai trò quan trọng trong trải nghiệm người dùng Khi FPS thấp, người chơi sẽ không cảm nhận được sự mượt mà, từ đó ảnh hưởng tiêu cực đến mức độ tương tác với trò chơi.

 Các yếu tố làm cho FPS chậm

 Hình vẽ có kích thước lớn

 Tính toán trong game nhiều

 Tối ưu hóa tính toán và các điều kiện thực hiện trong game:

+ Sử dụng ít vòng lặp

+ Dùng phép toán dịch chuyển bit thay cho phép nhân và phép chia

+ Khai báo các biến và phương thức ở dạng static

 Caching module của các file ảnh, tối ưu hóa các module dùng để vẽ sao cho số lượng module vẽ ra là ít

 Không vẽ từng sprite ra màn hình mà ta vẽ các sprite lên một ảnh và vẽ ảnh đó ra màn hình

 Bỏ các hiệu ứng không cần thiết

Giới hạn số lần vẽ trên một giây trong trò chơi là cần thiết để đảm bảo ứng dụng hoạt động ổn định, đặc biệt trong các trường hợp có FPS quá nhanh Việc này không chỉ ảnh hưởng đến quá trình xử lý mà còn khiến người chơi không thể theo kịp, đồng thời làm tiêu tốn nhanh chóng pin của thiết bị.

Là kích thước bộ nhớ có thể dùng để chạy chương trình game

 Các yếu tố ảnh hưởng đến bộ nhớ trong game

 File ảnh dùng trong game

 Âm thanh dùng trong game

 Các file text, mảng chứa text trong game

 Tối ưu hóa bộ nhớ

 Đơn giản hóa các frame và hình ảnh động

 Chia ảnh ra thành các module nhỏ

 Xóa các modelu dữ liệu sau khi caching

 Đóng gói sound có dung lượng nhỏ, load sound khi chạy sound và giải phóng khi dừng sound

 Dùng mảng 1 chiều thay vì dùng mảng 2 chiều

 Chỉ giữ những đối tượng cần thiết trong bộ nhớ để tránh vẫn đề phân mảnh bộ nhớ (là các đối tượng thường dùng (fonts, main character, …))

 Load khi muốn vẽ và giải phóng khi đi ra khỏi màn hình

 Tránh phân mảnh bộ nhớ: load các đối tượng có kích thước lớn trước, giữ cho bộ nhớ ổn định Không load và giải phóng quá nhiều lần

Một yếu tố quan trọng trong trò chơi là phát triển trí thông minh nhân tạo, giúp nhân vật có khả năng di chuyển linh hoạt, đưa ra quyết định chính xác về điểm đến và xây dựng chiến thuật hiệu quả Việc tạo ra những mức độ thông minh khác nhau cho từng nhân vật là rất cần thiết để nâng cao trải nghiệm chơi game.

2.3.6 Tương tác vật lý (game physics)

Khi nhắc đến vật lý trong trò chơi, các định luật vật lý ảnh hưởng đến chuyển động của vật thể dưới trọng lực và các lực khác, như lực ma sát Người chơi thường quan sát rõ ràng qua các hiện tượng như lửa, khói, đường đạn, vụ nổ và sự phá hủy vật liệu Việc áp dụng vật lý trong game không chỉ tăng tính sinh động mà còn mang lại sự hợp lý cho chuyển động của các đối tượng, giúp người chơi có trải nghiệm chân thực hơn.

Hình 2 29 Biểu diễn một số tương tác vật lý trong game

2.3.7 Âm thanh (sound) Âm thanh đóng vai trò rất lớn và nó quan trọng không kém gì hình ảnh ở trong game Âm thanh trong game tạo ra sự hứng thú cũng như tính hấp dẫn của trò chơi, nếu không có những tín hiệu âm thanh game sẽ rất nhàm chán

Thông thường trong một video game thì âm thanh được chia làm 2 loại chính:

 Nhạc nền (background music, hay gọi tắt là music): Nó là một đoạn nhạc dài được phát đi phát lại liên tục trong một hoặc nhiều state

Âm thanh hiệu ứng (hay sfx) là những đoạn âm thanh ngắn, thường được phát đồng thời với một sự kiện hoặc hành động xảy ra ngay lập tức Ví dụ điển hình bao gồm tiếng súng bắn hoặc tiếng sấm chớp, tạo ra cảm giác sống động và hấp dẫn cho người nghe.

Trong game, "state" được hiểu là một giai đoạn, màn hình, hoặc cảnh trong trò chơi Các state này có mối liên hệ chặt chẽ với nhau và thường bao gồm các trạng thái như logo nhà sản xuất, màn hình giới thiệu, menu chính, các menu phụ tùy chọn và màn chơi Mỗi giai đoạn như vậy được gọi là một state hoặc một scene.

PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG

Phân tích hệ thống

Game Warship là một trò chơi phòng thủ hấp dẫn, nơi người chơi điều khiển một tàu chiến để bảo vệ lãnh thổ khỏi các tàu chiến địch Bản đồ game rõ ràng phân chia ranh giới giữa quân ta và quân địch, bao gồm lãnh thổ, lãnh hải và đảo Nhiệm vụ của người chơi là tìm và tiêu diệt các tàu chiến của kẻ thù, ngăn chặn âm mưu xâm chiếm vùng đất và lãnh hải của mình.

Tàu chiến của địch sẽ xuất phát từ ngoài lãnh hải và tiến vào khu vực của người chơi Nếu tàu địch phát hiện tàu của người chơi trong phạm vi nhất định, nó sẽ rượt đuổi và tấn công cho đến khi một trong hai tàu bị bắn chìm Khi khoảng cách giữa hai tàu nằm trong tầm ngắm, tàu địch sẽ quay trái hoặc phải để tấn công Khi bị trúng đạn, tàu sẽ bị giảm máu (HP) và có thể bốc khói, cháy, và cuối cùng chìm Khi tàu địch bị đánh chìm, nó sẽ để lại chiến lợi phẩm như hộp máu và đạn trôi nổi trên biển.

Tàu chiến của người chơi xuất phát từ lãnh hải của mình và chỉ được di chuyển trong phạm vi đó Khi gặp tàu chiến địch, người chơi sẽ điều khiển tàu để tấn công, với điểm số được cộng khi bắn trúng Để chiến thắng, người chơi cần tiêu diệt toàn bộ tàu địch trong thời gian quy định; nếu không, game sẽ kết thúc Game Over xảy ra khi tàu chiến của người chơi bị đánh chìm hoặc khi tàu địch xâm chiếm lãnh thổ bằng cách chạm vào cột cờ trên đất liền.

3.2.1 Yêu cầu đặt ra đối với chương trình

Từ kịch bản game như trên chúng ta có thể đưa ra những yêu cầu chính đối với chương trình như:

 Di chuyển và xoay tàu bằng các phím A, W, D, E

 Người chơi có thể thay đổi các thông số mặc định về âm thanh, đồ họa, các phím điều khiển để chương trình thân thiện với người chơi hơn

 Xây dựng một rada để người chơi có thể nhận biết được vị trí tàu chiến của đối phương trong một phạm vi cho phép

 Chương trình có thể lưu lại kết quả của những người chơi cao để so sánh với các kết quả sau

 Để tăng tính cảm giác thật phải tạo ra các hiệu ứng lúc tàu di chuyển (nghiêng khi xoay và hiệu ứng sóng nước) và bắn xuất hiện khói…

Dựa vào các yêu cầu này ta có thể thiết kế được một sơ đồ use case mô tả các chức năng chính của chương trình như sau

Hình 3 1 Sơ đồ use case của hệ thống

3.2.2 Mô tả chi tiết các chức năng a Use case Bắt đầu chơi

 Tóm tắt: Use case này mô tả chức năng khi người chơi đã sẵn sàng vào màn hình chính của game để bắt đầu chơi

 Dòng sự kiện: o Dòng sự kiện chính: Use case này bắt đầu khi người chơi vào màn hình chính của game (main game)

 Hiển thị màn hình chính của game

 Người chơi nhấn vào nút “Play”

 Hiển thị giao diện trong game lúc xuất phát đã có nhân vật (tàu chiến)

 Người chơi bắt đầu điều khiển tàu chiến o Dòng sự kiện khác: Không có

 Các yêu cầu đặc biệt: Không có

 Điều kiện tiên quyết, tình trạng hệ thống trước khi thực hiện: Người chơi phải khởi động game và đợi game load các đối tượng

 Tình trạng hệ thống sau khi thực hiện: Màn hình chính chơi game xuất hiện

 Điểm mở rộng: Không có b Use case Tùy chọn

Tóm tắt: Bài viết này trình bày việc điều chỉnh các thông số tùy chọn mặc định trong game để đáp ứng nhu cầu và mục đích của người chơi.

Người chơi có thể lựa chọn giữa hai vấn đề chính là âm thanh và đồ họa, từ đó hiển thị các thông số kỹ thuật tương ứng trên menu.

 Hiển thị giao diện menu chính

 Người chơi nhấn vào nút “Options”

 Hiển thị giao diện của hộp thoại thay đổi các tùy chọn

 Người chơi thay đổi các tùy chọn bằng cách kéo con lăn trên thanh tùy chọn của từng đối tượng

Người chơi cần nhấn nút “Ok” để lưu lại các tùy chọn đã thay đổi Nếu người chơi nhấn nút “Options” để chỉnh sửa nhưng sau đó chọn “Cancel”, các thay đổi sẽ không được lưu và chương trình sẽ trở về giá trị tùy chọn trước đó, gần nhất với lần thay đổi mới nhất.

 Các yêu cầu đặc biệt: Không có

Trước khi thực hiện, cần lưu ý rằng các tùy chọn trong game sẽ ở trạng thái mặc định ngay khi khởi động và chưa được thay đổi.

 Tình trạng hệ thống sau khi thực hiện: Chương trình sẽ lưu và thực hiện theo các tùy chọn mới nếu sau khi thay đổi nhấn nút “Ok”

 Điểm mở rộng: Không có c Use case Điểm cao

 Tóm tắt: Use case này cho người chơi biết hiện tại ai đã chơi và chơi game này với 5 số điểm cao nhất trong các lần chơi trước

 Tác nhân: Người chơi và máy tính

 Dòng sự kiện: o Dòng sự kiện chính: Use case này bắt đầu khi người chơi nhấn vào nút

“High scores” tại màn hình menu của game

 Hiển thị giao diện menu chính

 Người chơi nhấn vào nút “High scores”

 Hiển thị giao diện high score của game cho biết tên năm người chơi với số điểm cao nhất trong các lần chơi gần nhất

Người chơi có thể nhấn nút "Ok" để thoát khỏi màn hình điểm cao và trở về màn hình chính của game Nếu người chơi muốn thiết lập lại tất cả điểm số sau khi xem điểm cao của các người chơi trước, họ chỉ cần nhấn nút tương ứng.

 Các yêu cầu đặc biệt: Không có

 Điều kiện tiên quyết, tình trạng hệ thống trước khi thực hiện: Điểm cao của các người chơi trước được lưu lại và hiển thị trong hệ thống

 Tình trạng hệ thống sau khi thực hiện: Màn hình high score cho người chơi biết số điểm mình có vượt các người chơi trước hay không

 Điểm mở rộng: Không có d Use case Trợ giúp

 Tóm tắt: Use case này sẽ hiển thị hướng dẫn cho người chơi biết cách sử dụng bàn phím, chuột…để chơi game

 Tác nhân: Người chơi và máy tính

 Dòng sự kiện: o Dòng sự kiện chính: Use case này bắt đầu khi người chơi nhấn vào nút

“Help” tại màn hình menu chính của chương trình

 Hiển thị menu chính của game

 Người chơi nhấn vào nút “Help”

 Hiện thị giao diện trợ giúp hướng dẫn cho người chơi cách chơi game

 Người chơi nhấn nút “Ok” để thoát khỏi màn hình trợ giúp và quay trở lại màn hình menu chính của game

 Các yêu cầu đặc biệt: Không có

 Điều kiện tiên quyết, tình trạng hệ thống trước khi thực hiện: Người chơi sử dụng phần mềm game lần đầu tiên cần phải biết cách chơi, điều khiển

 Tình trạng hệ thống sau khi thực hiện: Màn hình trợ giúp hướng dẫn người chơi cách chơi

 Điểm mở rộng: Không có e Use case Thoát game

 Tóm tắt: Use này hoạt động thì chương trình sẽ thoát game

 Tác nhân: Người chơi và máy tính

 Dòng sự kiện: o Dòng sự kiện chính: Use case bắt đầu khi người chơi nhấn nút “Exit” trên màn hình menu chính của chương trình

 Hiển thị màn hình menu chính của game

 Người chơi nhấn vào nút “Exit”

 Giao diện xác nhận việc thoát xuất hiện

Người chơi có thể nhấn nút “Ok” để chương trình tự động thoát Nếu không muốn thoát và muốn quay lại giao diện menu chính, người chơi chỉ cần nhấn nút “No” khi giao diện xác nhận xuất hiện.

 Các yêu cầu đặc biệt: Không có

 Điều kiện tiên quyết, tình trạng hệ thống trước khi thực hiện: Người chơi đang trong màn hình menu chính của chương trình game

 Tình trạng hệ thống sau khi thực hiện: Chương trình sẽ thoát, nếu người chơi muốn chơi tiếp phải khởi động lại game

 Điểm mở rộng: Không có f Use case Nhập tên

Tóm tắt: Tính năng này cho phép người dùng nhập tên sau khi hoàn thành trò chơi (thắng hoặc thua) để lưu lại điểm số nếu điểm hiện tại vượt qua điểm cao nhất trong 5 lần chơi trước.

 Tác nhân: Người chơi và máy tính

 Dòng sự kiện: o Dòng sự kiện chính: Use case này được thực hiện khi người chơi kết thúc quá trình chơi

 Hiển thị hộp thoại nhập tên

 Người chơi nhập tên của mình vào ô trống

 Người chơi nhấn nút “Ok”

 Xuất hiện thông báo “Save complete”

 Người chơi nhấn nút “Ok”

Chương trình sẽ trở về màn hình menu chính của game nếu người chơi nhấn nút “Cancel” trong hộp thoại nhập tên, dẫn đến việc điểm số không được lưu lại.

 Các yêu cầu đặc biệt: Bắt buộc người chơi phải nhập tên vào texbox

Trước khi thực hiện, người chơi cần hoàn tất quá trình chơi game với trạng thái thắng hoặc thua Đồng thời, số điểm hiện tại phải cao hơn 5 số điểm cao nhất trước đó.

 Tình trạng hệ thống sau khi thực hiện: Chương trình sẽ lưu lại tên người chơi và số điểm, giá trị này được hiển thị trong mục high score

 Điểm mở rộng: Không có

 Các use case hoạt động

Các use case trong trò chơi mô tả các hoạt động của nhân vật tàu chiến của người chơi và đối thủ Những use case này bao gồm các hoạt động mở rộng như di chuyển, bắn đạn, nhặt item và chết Use case di chuyển là một trong những yếu tố quan trọng trong việc điều khiển nhân vật.

 Tóm tắt: Use case này mô tả cách di chuyển tàu chiến theo các hướng trong bản đồ

 Tác nhân: Người chơi và máy tính

Người chơi có thể điều khiển tàu chiến trong game bằng các phím W (đi tới), A (qua trái), D (qua phải) và S (lùi lại) để di chuyển đến vị trí mong muốn.

 Hiển thị giao diện chơi chính

 Nhấn một hoặc tổ hợp phím A, W, D, S để di chuyển tàu chiến theo hướng người chơi mong muốn

Tàu chiến sẽ di chuyển liên tục khi người chơi giữ phím, và sẽ dừng lại từ từ theo hướng trước đó khi người chơi thả tất cả các phím.

 Khi tàu chiến di chuyển qua trái, phải thì tàu sẽ nghiêng về một phía để tạo cảm giác thật trong 3D

Thiết kế hệ thống

4.1.1 Load model *.obj a Model 3D là gì?

Khi nghiên cứu công nghệ 3D, khái niệm model 3D là rất quan trọng, vì nó không chỉ đại diện cho đối tượng mà còn là hình ảnh thực của vật thể Trên model 3D, người dùng có thể gán vật liệu, ánh sáng và tô bóng để tạo ra hình ảnh chân thực Việc đánh giá mức độ chi tiết của các model thường dựa vào số lượng đa giác (polygon) trong quá trình dựng hình Ví dụ, các game cũ như Half-Life và Warcraft 3 thường có số polygon cho mỗi nhân vật không vượt quá 1000, trong khi các game hiện đại có thể có từ 1000 đến 2500 polygon Mặc dù việc sử dụng nhiều polygon giúp tạo ra nhân vật mịn màng hơn, nhưng nó cũng tiêu tốn nhiều bộ nhớ (DRAM) của card màn hình và có thể làm giảm tốc độ xử lý.

Trong quá trình thiết kế game, các nhân vật chính và trùm thường được xây dựng với nhiều polygon hơn để tạo sự hấp dẫn, trong khi các quái vật và nhân vật phụ không quan trọng thường có ít polygon hơn Việc tạo model cho game thường sử dụng các phần mềm như 3DS Max, Maya hoặc một số phần mềm 3D khác Các định dạng model phổ biến bao gồm mdl, mdl2, x, 3ds, và obj, trong đó định dạng obj nổi bật nhờ cấu trúc rõ ràng, cho phép người dùng mở và chỉnh sửa bằng notepad.

File obj là định dạng chứa thông tin về khung của mô hình 3D, bao gồm các điểm và mặt tạo thành mô hình Cấu trúc của file obj rất đơn giản và dễ hiểu.

CÀI ĐẶT VÀ KẾT QUẢ CHƯƠNG TRÌNH

Cài đặt chương trình

4.1.1 Load model *.obj a Model 3D là gì?

Khi nghiên cứu công nghệ 3D, khái niệm model 3D là rất quan trọng, vì nó không chỉ đại diện cho đối tượng mà còn là hình ảnh thực của vật thể Trên model 3D, người dùng có thể gán vật liệu, ánh sáng và tô bóng để tạo ra hình ảnh chân thực, điều này rất cần thiết trong giai đoạn thiết kế Để đánh giá mức độ chi tiết của các model, người ta thường xem xét số lượng đa giác (polygon) được sử dụng Ví dụ, các game cũ như Half-Life và Warcraft 3 thường có số polygon cho mỗi nhân vật dưới 1000, trong khi các game hiện đại có thể từ 1000 đến 2500 polygon Mặc dù số polygon cao hơn giúp nhân vật mịn màng hơn, nhưng điều này cũng làm tăng mức tiêu thụ bộ nhớ DRAM của card màn hình và có thể làm giảm tốc độ xử lý.

Trong phát triển game, các nhân vật chính và trùm thường được thiết kế với nhiều polygon hơn để tạo vẻ đẹp, trong khi các quái vật và nhân vật phụ ít quan trọng hơn thường có ít polygon hơn Việc dựng mô hình cho game thường sử dụng các phần mềm như 3DS Max, Maya và một số phần mềm 3D khác Định dạng mô hình phổ biến bao gồm mdl, mdl2, x, 3ds và obj, trong đó chuẩn obj nổi bật với cấu trúc rõ ràng, dễ dàng mở và chỉnh sửa bằng Notepad.

File obj là định dạng chứa khung của mô hình 3D, bao gồm các điểm và mặt tạo nên mô hình Cấu trúc của file obj rất đơn giản, giúp dễ dàng trong việc lưu trữ và xử lý thông tin mô hình.

Hình 4 1 Cấu trúc model obj

 Văn bản sau dấu # là ghi chú về file obj

 v là vertex – danh sách các điểm của model, x, y, z là các tọa độ của vertex đó

 vt là texture coordinate – tọa độ texture ứng với đỉnh đó, x, y lần lượt là tọa độ các texture

 vn là vertex normal – vector pháp tuyến tại đỉnh

 f là face – có công thức tổng quát

 f v1/[vt1]/[vn1] v2/[vt2]/[vn2]… vx/[vtx]/[vnx]

Trong định nghĩa về mặt phẳng, các điểm v1, v2, …, vx được xác định, với vt1 sau v1 chỉ ra tọa độ texture của điểm v1 Hướng điểm vn1 sau v1 sẽ ảnh hưởng đến quá trình backface cull Bài viết này cũng hướng dẫn cách đọc và vẽ mô hình obj bằng thư viện đồ họa OpenGL.

Trong OpenGL, việc tải mô hình 3D yêu cầu đọc tất cả các thành phần như đỉnh (v), tọa độ texture (vt), vector pháp tuyến (vn) và mặt (f) vào mảng Sau đó, các đỉnh và mặt sẽ được vẽ, trong khi tọa độ texture (vt) được sử dụng để áp dụng texture cho mô hình, và vector pháp tuyến (vn) hỗ trợ cho quá trình chiếu sáng.

4.1.2 Thuật toán đồng bộ hóa frame Đồng bộ hóa frame là một kỹ thuật làm cho hành ảnh chuyển động trong game được mịn Trong game có nhiều đối tượng với nhiều hình ảnh đồ họa được vẽ liên tục Nếu cứ mỗi lần có 1 đối tượng thay đổi ta lại cập nhật lên màn hình thì sẽ không tạo được cảm giác các đối tượng chuyển động đồng thời Để giải quyết vấn đề này chúng ta chờ tất cả các đối tượng thay đổi rồi mới cập nhật lên màn hình

Trong quá trình chạy game, sự chênh lệch về tốc độ xử lý có thể khiến chuyển động của các đối tượng trở nên không đồng đều, tạo cảm giác giật lag Để khắc phục tình trạng này, cần quy định thời gian cập nhật màn hình là cố định Sau khi hoàn thành tất cả các xử lý trong một frame, chúng ta sẽ kiểm tra thời gian thực hiện; nếu thời gian này chưa đủ, sẽ phải chờ cho đến khi đạt yêu cầu mới tiến hành cập nhật lên màn hình.

Hình 4 2 Sơ đồ thuật toán đồng bộ frame

4.1.3 Thuật toán di chuyển ngẫu nhiên cho tàu chiến, kiểm tra va chạm ranh giới

Tàu chiến di chuyển ngẫu nhiên trên mặt biển với posX, posZ, rotY thay đổi

 posX, posY, posZ là vị trí hiện tại của tàu chiến

 rotY là góc dùng xác định phương, hướng của tàu chiến khi khởi tạo

 v là vận tốc tàu chiến

 rotRadY là gốc quay của tàu chiến tính bằng radian

Hình 4 3 Sơ đồ thuật toán di chuyển tàu ngẫu nhiên

Kết quả chương trình

Sau khi hoàn thành việc cài đặt bài toán trong một khoảng thời gian nhất định, chương trình đã xây dựng được một nền tảng game cơ bản, từ đó dễ dàng phát triển một trò chơi 3D hoàn chỉnh, kết hợp giữa giải trí và giáo dục trong thế giới game.

4.2.1 Màn hình menu chính của game

Hình 4 4 Màn hình chính của game

4.2.2 Màn hình chính trong game

Hình 4 5 Màn hình khi đang chơi game

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN

Kết quả đạt được

 Cũng cố lại các kiến thức về ngôn ngữ lập trình C++ và lập trình hướng đối tượng

 Nắm được các kiến thức cơ bản về quá trình làm game 3D, các kỹ thuật được sử dụng để phát triển một game 3D

 Biết cách sử dụng thư viện đồ họa mã nguồn mở OpenGL trong lập trình đồ họa, đặc biệt là trong lập trình game 3D

 Load được model *obj lên màn hình sử dụng các kỹ thuật của thư viện đồ họa OpenGL như light,…

 Xây dựng được cấu trúc của game Warship 3D hoàn thành 70% so với phân tích và thiết kế ban đầu

2 Hướng phát triển của đề tài

 Nghiên cứu các kỹ thuật phát triển game 3D để hoàn thiện các phần còn lại của game Warship 3D với mục đích có thể chơi được trên mọi máy tính

 Nghiên cứu cách lập trình game 3D trên các thiết bị di động như điện thoại nhằm đưa game lên trên các thiết bị đó.

Ngày đăng: 08/05/2021, 21:04

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[2] Lê Tấn Hùng, Huỳnh Quyết Thắng (2000), Kỹ thuật đồ họa, Nhà xuất bản khoa học và kỹ thuật.Tiếng nước ngoài Sách, tạp chí
Tiêu đề: Kỹ thuật đồ họa
Tác giả: Lê Tấn Hùng, Huỳnh Quyết Thắng
Nhà XB: Nhà xuất bản khoa học và kỹ thuật. Tiếng nước ngoài
Năm: 2000
[3] Wendy Stahler (2004), Beginning Math and Physics for Game Programmers, New Riders Publishing Sách, tạp chí
Tiêu đề: Beginning Math and Physics for Game Programmers
Tác giả: Wendy Stahler
Năm: 2004
[4] Michael Dawson (2006), Beginning C++ Game Programming, Course Technology PTR Sách, tạp chí
Tiêu đề: Beginning C++ Game Programming
Tác giả: Michael Dawson
Năm: 2006
[5] Practice C++ Trang web Sách, tạp chí
Tiêu đề: Practice C++
[1] Lê Phong, Hướng dẫn lập trình OpenGL căn bản Khác

TỪ KHÓA LIÊN QUAN

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