1. Trang chủ
  2. » Luận Văn - Báo Cáo

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

76 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 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 Tin học
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 bằng cách nghiên cứu lập trình với thư viện đồ họa OpenGL, cũng như tìm hiể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 khóa luận, bao gồm 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, trình biên dịch, cùng với những ưu và nhược điểm trong lập trình game, cũng như các công cụ hỗ trợ trong quá trình thực hiện Chương 2 cung cấp cơ sở lý thuyết về lập trình 3D, nhấn mạnh việc sử dụng thư viện đồ họa OpenGL và các kỹ thuật cơ bản trong lập trình game Chương 3 phân tích và thiết kế hệ thống, mô tả kịch bản game, từ đó xây dựng các chức năng và thiết kế module cho chương trình, đồng thời trình bày mô hình hoạt động Cuối cùng, Chương 4 trình bày quá trình cài đặt chương trình, các thuật toán được áp 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 để phát triển 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 và phổ biến, được giảng dạy rộng rãi trong các chương trình đại học Với tốc độ thực thi nhanh và khả năng hỗ trợ trên nhiều nền tảng như Windows, Linux, MacOS, Android, và iPhone/iPad, C/C++ trở thành lựa chọn ưa chuộng trong lập trình game Nhờ vào những ưu điểm vượt trội của C++, tôi đã quyết định sử dụng ngôn ngữ này để 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, cung cấp môi trường phát triển cho ngôn ngữ C/C++ trên hệ điều hành Windows Nó cho phép lập trình viên thực hiện nhiều nhiệm vụ như coding, thiết kế giao diện và thực thi lệnh Với Visual C++, người dùng có thể phát triển các ứng dụng cho Windows, ActiveX và thư viện liên kết động DLL Công cụ này đi kèm với nhiều tính năng hỗ trợ thiết kế giao diện, kiểm lỗi và sửa lỗi, giúp tăng tốc độ phát triển dự án nhanh chóng So với Java, thời gian phát triển một dự án trên Visual C++ có thể nhanh hơn gấp rưỡi đến gấp đôi Hơn nữa, Visual C++ sở hữu thư viện hàm và đối tượng phong phú, cùng với hệ thống thư viện online MDSN, tạo điều kiện thuận lợi cho việc học hỏi của 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ở, tiêu chuẩn kỹ thuật định nghĩa giao diện lập trình ứng dụng đồ họa 3 chiều, nhưng cũng hỗ trợ cả đồ họa 2 chiều Với khoảng 250 hàm, OpenGL cho phép vẽ các cảnh phức tạp từ những hàm đơn giản, và được sử dụng phổ biến trong lập trình game cũng như 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ế để đặc tả và phát triển tài liệu cho 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ề yêu cầu phần mềm và đưa ra quyết định chính xác trong quá trình xây dựng UML bao gồm một bộ 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 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ẽ, được thiết kế để phục vụ cho cả con người và máy móc Nó cung cấp một tập hợp các ký hiệu và quy tắc nhằm 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 đồ rõ ràng và dễ hiể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 sử dụng 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 để 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 xác định và các lớp trong pha phân tích, giúp làm rõ mối quan hệ và tương tác giữa các thành phần trong hệ thống.

Xây dựng biểu đồ lớp chi tiết là quá trình hoàn thiện biểu đồ lớp 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à dựa vào 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 hoạt động phức tạp trong từng lớp hoặc các hoạt động liên quan giữa nhiều lớp trong hệ thống Nó cung cấp nền tảng cần thiết cho việc cài đặt các phương thức trong các lớp, 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 bao gồm việc xác định 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 quá trình triển khai.

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

UML (Unified Modeling Language) là ngôn ngữ mô hình hóa tổng quát, được thiết kế để đặc tả, phát triển và viết 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à đưa ra quyết định 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 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 cần thiết để mô hình hóa các giai đoạn trong quá 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 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 đồ use case là các kịch bản, giúp minh họa 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 Các biểu đồ này dựa trên những kịch bản đã được xác định và các lớp đã được phân tích trong giai đoạn trước đó.

Xây dựng biểu đồ lớp chi tiết là quá trình hoàn thiện biểu đồ lớp 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 được xây dựng để mô tả các hoạt động phức tạp trong từng lớp hoặc sự tương tác 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 trong các lớp, 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, 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 quá trình triển khai.

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 chỉ phản hồi theo thông điệp từ người dùng, như Word định dạng văn bản dựa trên những gì người dùng nhập và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 có một vòng lặp game, trong đó thực hiện các công việc lặp đi lặp lại như 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.

Game loop là yếu tố thiết yếu trong mọi trò chơi, không thể thiếu để đảm bảo hoạt động của game Nó giúp duy trì sự ổn định cho trò chơi, không bị ảnh hưởng bởi các tương tác của 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 nền tảng phát triển, với hai hàm chính là Update và Render Trong quá trình này, biến bool game_is_running được sử dụng để kiểm soát việc thực thi vòng lặp, đảm bảo game tiếp tục chạy cho đến khi điều kiện dừng được thỏa mãn.

Trong lĩnh vực đồ họa 2D, khái niệm sprite được sử dụng, trong đó mỗi sprite bao gồm nhiều hình ảnh khác nhau, gọi là frame Ngược lại, trong đồ họa 3D, khái niệm model xuất hiện, với mỗi model 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 độ để vẽ Frame có thể được hiểu như một hình ảnh toàn màn hình, bao gồm tất cả các frame của model, sprite và cả 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ố lần vẽ khung hình trên giây, đóng vai trò quan trọng trong trải nghiệm người dùng FPS thấp có thể làm giảm cảm giác chân thực, ảnh hưởng tiêu cực đến sự tương tác của người chơi 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 tình huống có FPS cao Việc này giúp cải thiện quá trình xử lý, ngăn chặn tình trạng người chơi không theo kịp và giảm thiểu việc tiêu tốn 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 game là phát triển trí thông minh cho nhân vật, giúp chúng có khả năng di chuyển, đưa ra quyết định về điểm đến và thực hiện chiến thuật Việc tạo ra trí thông minh đa dạng cho từng nhân vật là 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 khía cạnh 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ư ma sát Người chơi thường chú ý đến 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 tạo ra sự hợp lý trong chuyển động của các đối tượng, mang đến cho người chơi cảm giác chân thực.

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à đoạn âm thanh ngắn gắn liền với sự kiện hoặc hành động tức thời, như tiếng đạn bắn hay tiếng sấm chớp.

Trong game, "state" được hiểu là một giai đoạn hay một màn hình cụ thể, bao gồm các phần như logo nhà sản xuất, màn hình giới thiệu, menu chính, các menu phụ và màn chơi Các state này có mối liên hệ chặt chẽ với nhau, tạo thành cấu trúc tổng thể của trò chơi Mỗi giai đoạn như vậy được gọi là một state hoặc 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, trong đó người chơi điều khiển một tàu chiến để chiến đấu chống lại nhiều tàu chiến địch Bản đồ trò chơi được phân chia rõ ràng giữa lãnh thổ của người chơi và quân địch, bao gồm lãnh hải, đảo và các khu vực khác Nhiệm vụ của người chơi là tìm kiếm và tiêu diệt các tàu chiến của địch, 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 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 Khi phát hiện tàu của người chơi trong phạm vi nhất định, tàu địch sẽ rượt theo và tấn công cho đến khi một trong hai bên 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ẽ xoay trái hoặc phải để tấn công Khi bị trúng đạn, tàu sẽ giảm máu (HP) và có thể bốc khói, cháy, rồi chìm Khi tàu địch bị đánh chìm, nó sẽ để lại chiến lợi phẩm là những hộp máu hoặc đạn trôi nổi trên biển.

Tàu chiến của người chơi sẽ khởi hành từ lãnh hải của mình và chỉ được hoạt động trong khu vực này Khi gặp tàu chiến địch, người chơi sẽ điều khiển tàu của mình để tấn công, tương tự như cách tàu địch bắn Mỗi lần bắn trúng tàu địch, người chơi sẽ nhận được điểm, và số điểm này sẽ được lưu lại sau khi màn chơi kết thúc Để 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 nhập vào lãnh thổ bằng cách chạm vào cột cờ trong khu vực của người chơi.

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 nhằm đáp ứng nhu cầu và mục tiêu 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 liên quan 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 các tùy chọn đã thay đổi Nếu người chơi nhấn nút “Options” để điều chỉnh các tùy chọn nhưng sau đó chọn “Cancel” thay vì “Ok”, chương trình sẽ không lưu lại các thay đổi và sẽ quay về giá trị tùy chọn gần nhất trước đó.

 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 sau khi khởi động, nếu chưa có bất kỳ thay đổi nào được thực hiện.

 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ề menu chính của game Nếu 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, người chơi 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

Khi người chơi nhấn nút "Ok", chương trình sẽ tự động thoát Nếu giao diện xác nhận xuất hiện và người chơi không muốn thoát, họ có thể nhấn nút "No" để quay lại giao diện menu chính.

 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

Người dùng có thể nhập tên người chơi sau khi kết thúc game (Win hoặc Over game) để lưu lại số điểm, nhưng chỉ khi số điểm hiện tại cao hơn số đ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 không nhấn “Ok” trong hộp thoại nhập tên mà chọn “Cancel”, điểm số của họ sẽ không được lưu và màn hình sẽ trở lại menu chính.

 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 thành quá trình chơi game với trạng thái thắng hoặc thua Để đủ điều kiện, 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 game 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 Trong đó, use case di chuyển đóng vai trò 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 (tiến), A (trái), D (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ả tay khỏi 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ể Model 3D cho phép 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 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 tính số đa giác (polygon) trong mỗi model Ví dụ, các game cũ như Half-Life hay 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ể từ 1000 đến 2500 polygon Mặc dù việc sử dụng nhiều polygon giúp tạo ra hình ảnh 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à làm giảm tốc độ xử lý.

Trong thiết kế game, các nhân vật chính và trùm thường được tạo dựng với nhiều polygon hơn để tăng tính thẩm mỹ, trong khi quái vật và nhân vật phụ 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 và 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 với cấu trúc rõ ràng, cho phép mở và chỉnh sửa dễ dàng bằng Notepad.

File obj là định dạng lưu trữ 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 quản lý và sử dụng mô hình.

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 tính số đa giác (polygon) sử dụng để dựng lên model Ví dụ, các game cũ như Half-Life hay 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 nay 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 cũng đồng nghĩa với việc tiêu tốn nhiều tài nguyên đồ họa và có thể làm giảm hiệu suất xử lý.

Trong thiết kế game, các nhân vật chính và trùm thường được tạo hình với nhiều polygon hơn để tăng tính thẩm mỹ, trong khi các quái vật và nhân vật phụ không quan trọng lại có ít polygon hơn Quá trình dựng model thường sử dụng các phần mềm như 3DS Max, Maya hoặc các phần mềm 3D khá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 cấu trúc 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 một file obj rất đơn giản và dễ hiểu.

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 cấu thành được ký hiệu là v1, v2, …, vx, với vt1 là tọa độ texture liên quan đến điểm v1, và vn1 chỉ ra hướng của điểm v1, quyết định quá trình backface culling Bài viết này sẽ hướng dẫn cách đọc và vẽ mô hình obj bằng cách sử dụng thư viện đồ họa OpenGL.

Trong OpenGL, việc tải mô hình 3D bao gồm việc đọc tất cả các thành phần như (v, vt, vn, f) vào mảng Sau đó, chúng ta sẽ vẽ các đỉnh và mặt, sử dụng vt để áp dụng texture cho mô hình, trong khi vn được dùng cho mục đích 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

Khi game chạy, có lúc các xử lý diễn ra nhanh chóng, có lúc lại chậm, dẫn đến việc các đối tượng di chuyển không đồng đều, gây cảm giác game bị giật Để khắc phục tình trạng này, chúng ta 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 xem thời gian thực hiện có đủ cho một frame hay không Nếu thời gian thực hiện nhỏ hơn quy định, chúng ta sẽ đợi đến khi đủ thời gian trước khi 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 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 khung game cơ bản Từ đó, có thể 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: 22/05/2021, 09:56

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