Biểu đồ lớp

Một phần của tài liệu Xây dựng game engine đa nền tảng quản lý tài nguyên và chuyển động của các đối tượng (Trang 26 - 34)

3.5.1.Quản lý Mesh

Hình 11. Biểu đồ lớp Mesh và MeshBank

Để quản lí một mesh (các vật thể) ta sẽ cần lưu những thông tin quan trọng sau:

• Lớp Mesh

Các thuộc tính:

- vertexArray: chứa thông tin về các đỉnh của mesh - normalArray: chứa thông tin về véc tơ normal - texCoordArray: chứa thông tin về texcoordinate - numVertices: số lượng đỉnh của mesh đó

- user: cho biết số lượng tham chiếu đang chiếu tới nó

Các phương thức:

- getUser(): lấy ra số lượng các tham chiếu đang sử dụng nó

- setUser(): Khi ta dùng một mesh nào đó thì tăng số lượng tham chiếu tới nó lên (tăng user)

- delUser(): Khi ta không dùng một mesh nào đó thì sẽ xóa số lượng tham chiếu tới nó đi. Khi nào user=0 thì hệ thống quản lí tài nguyên sẽ tự động xóa mesh đó khỏi bộ nhớ.

• Lớp MeshBank

Các thuộc tính:

- meshArray: lưu trữ một danh sách các mesh khi được nạp vào

Các phương thức:

- insertMesh(_mesh, k): thêm một _mesh vào vị trí k trong danh sách - appendMesh(_mesh): thêm _mesh vào cuối danh sách các mesh hiện có - deleteMesh(k): xóa một mesh ở vị trí k trong danh sách

- getMeshFromID(meshID): lấy ra một mesh ở vị trí meshID trong danh sách

- useMesh(meshID): gọi phương thức setUser() của phần tử có vị trí meshID

- dontUseMesh(meshID): gọi phương thức delUser() của phần tử có vị trí meshID

3.5.2.Quản lý Texture

Hình 12. Biểu đồ lớp Texture và TextureBank

• Lớp Texture

Các thuộc tính:

- m_User: số lượng đối tượng đang sử dụng nó

- m_NativeGDID: là ID của texture được quản lí bởi card đồ họa - m_Info: Thông tin về một texture

- m_Name: tên của texture

Các Phương thức:

- Có các phương thức get, set, del User như lớp mesh Thông tin về một textute gồm:

{ E_TEXTURE_FORMAT tfFormat; E_PIXEL_FORMAT tfPixelFormat; u32 tfMaxMipMapLevels; u32 tfWidth; u32 tfHeight; s32 tfSize; bool tfGenMipmap; bool tfCompressed; E_TEXTURE_FILTER tfFilter; E_TEXTURE_WRAP tfWrap; E_TEXTURE_TYPE tfType; } TextureInfo;

E_TEXTURE_FORMAT: là một loại định dạng của texture trong card đồ họa E_PIXEL_FORMAT: định dạng của dữ liệu fixel được sử dụng trong card đồ họa

tfMaxMipMapLevels: giá trị tầng lớn nhất của MipMap, nếu =0 tức là không có mipmap.

tfWidth, tfHeight: kích cỡ của texture tfSize: kích cỡ của dữ liệu pixel

tfGenMipmap: nếu = true card đồ họa sẽ tự động sinh ra mipmap cho texture tfCompressed: =true nếu dữ liệu pixel được tạo định dạng

E_TEXTURE_TYPE: loại của texture: 1D, 2D, 3D, Cubemap E_TEXTURE_WRAP: cách gắn texcoordinate

E_TEXTURE_FILTER: để xác định việc gắn texture, có 2 loại: min, map tức là thu nhỏ hoặc phóng to

• Lớp TextureBank

Do texture không lưu dữ liệu mà lưu thông tin về texture, còn những dữ liệu đó đã nằm trong card đồ họa. Vì vậy bank sẽ không lưu texture dưới dạng con trỏ như các bank khác. Các phương thức trong lớp TextureBank cũng giống như trong lớp MeshBank, vì texture có thêm thuộc tính m_Name nên trong bank sẽ có thêm các phương thức để quản lí theo tên (cũng tương tự như ID).

3.5.3.Quản lý Effect

Hình 13. Biểu đồ lớp Effect và EffectBank

• Lớp Effect

Các thuộc tính:

- cgContext: lưu context chứa chương trình Cg - cgEffect: Lưu effect

- cgTechnique: lưu technique của chương trình Cg phù hợp nhất với GPU hiện tại

Các phương thức:

- updateEffectParameter(): cập nhật giá trị các tham số trong chương trình cg - getFirstPass(): lấy pass đầu tiên trong chương trình cg

- getNextPass(aPass): lấy pass ngay sau aPass

• Lớp EffectBank

Các thuộc tính:

- effectArray: mảng lưu danh sách các Effect

- append(_effect): lưu một Effect vào danh sách các effect, trả về id của effect thêm vào

- remove(id): xóa effect có ID là id ra khỏi danh sách các effect - getEffectFromID(id): trả về một Effect có ID là id

3.5.4.Quản lý AnimatedMesh

Hình 14. Biểu đồ lớp AnimatedMesh và AnimatedMeshBank

AnimatedMesh là một loại mesh có sẵn các chuyển động, để tạo ra được loại mesh này ta dùng hai kỹ thuật: key-frame và skinning. Lớp AnimatedMesh sẽ được thừa kế từ 2 lớp Key-frame và skinning. Để có thể tương tác được với các mesh có sẵn chuyển động này thì ta sẽ phải quản lí các thông tin sau:

• Lớp AnimatedMesh

Các thuộc tính:

- vertexArray: chứa vị trí các đỉnh của mesh tại một thời điểm phụ thuộc vào hàm tính nội suy

- numVertice: số lượng đỉnh cho một mesh

- coorPerVer: số chiều của đỉnh (thông thường là 3: x,y,z) - normalArray: chứa thông tin về normal

- coorPerNor: số chiều của normal

- texCoordArray: mảng chứa các textcoordinate (tọa độ texture) - numTexcoords: số lượng texcoordinate có trong mảng

- coorPerTex: số chiều của texcoordinate

- user: số lượng tham chiếu đang chiếu tới mesh (đang sử dụng mesh)

Các phương thức:

- interpolate(factor): hàm tính nội suy theo factor, hàm này sẽ gọi các phương thức nội suy ở lớp Key-frame và skinning để lấy ra các đỉnh, normal, … của mesh tại một thời điểm.

- getUser(): trả về số lượng đang tham chiếu tới mesh (đang sử dụng nó) - setUser(): khi một đối tượng nào đó sử dụng mesh thì tăng user lên

- delUser(): khi một đối tượng không sử dụng mesh nữa thì sẽ giảm số lượng tham chiếu tới mesh đó đi. Khi user=0 tức là không có tham chiếu nào tới nó

• Lớp AnimatedMeshBank : cũng được quản lí như trong lớp MeshBank

3.5.5.Quản lý Material

Material là vật liệu, chất liệu được phủ lên các đối tượng, phục vụ cho việc tính toán ánh sáng. Quản lí material có các thông tin sau:

• Lớp Material

Các thuộc tính:

- Illum: loại mô hình chiếu sáng: Phong, Lambert, Blinn … - Ka: màu ambient của vật liệu

- Kd: màu diffuse của vật liệu - Ks: màu specular của vật liệu - Tf: màu của vật liệu

- Ni: hệ số bóng của vật liệu

Các phương thức:

- loadFromMtl(fileName: String): lấy thông tin về material từ file .mtl - Các phương thức khác để set, và get các thuộc tính

Chương 4.CHUYỂN ĐỘNG CỦA CÁC ĐỐI TƯỢNG

4.1.Giới thiệu

Trong lịch sử phát triển game từ trước đến nay thì một phần hết sức quan trọng làm nên thành công của game đó là chuyển động của các nhân vật trong game. Từ những thập niên 80, 90 của thế kỷ trước game đã bắt đầu phát triển, thời đó game dung lượng rất nhỏ - với chỉ một đĩa mềm dung lượng hơn 1 MegaByte là ta có thể lưu trữ rất nhiều game, và các game chạy trên nền MS-DOS. Tuy những game nhỏ như vậy nhưng các nhân vật trong game cũng đã bắt đầu có chuyển động. Chẳng hạn như game Mario hay Ninja các nhân vật cũng đã có các chuyển động như đi, chạy, đấm, đá, … Tuy những chuyển động đó còn rất thô sơ nhưng đã đánh dấu những bước phát triển của game.

Dần theo thời gian game đã phát triển một cách vũ báo cùng với sự phát triển của phần cứng, ngày nay dung lượng của game được tính bằng Gigabyte chứ không phải Kilobyte. Đáp ứng theo sự phát triển đó thì các hiệu ứng trong game ngày nay cũng rất cao cấp, các chuyển động của nhân vật cũng phong phú và uyển chuyển hơn rất nhiều. Game ngày càng hướng tới mục đích tạo ra những không gian gần gũi và giống thật nhất, các cử chỉ, chuyển động của nhân vật trong game cũng ngày càng giống người hơn. Vì vậy để tạo ra những chuyển động cho nhân vật thì những người thiết kế nhân vật cũng như những người lập trình viên đã phải rất nỗ lực để đem lại cho người chơi những trải nghiệm thú vị nhất.

4.2.Khái quát về animation

Animation (chuyển động) là kết quả cuả một hoạt động xảy ra theo thời gian – chẳng hạn một đối tượng dao động, một ánh sáng tắt dần đi hay là một nhân vật trong game đang chạy. Các game được sử dụng kỹ thuật animation sẽ đem lại hiệu quả cao hơn về hình ảnh, giúp hình ảnh di chuyển, chuyển động một cách uyển chuyển, mượt mà, tạo sức hấp dẫn cho các hoạt cảnh [3].

Ngày nay với những máy móc, công cụ hiện đại thì các nhân vật trong game được thiết kế ngày càng giống người hơn, và các kỹ thuật để tạo ra chuyển động cho nhân vật ngày càng được cải tiển và phát triển. Kỹ thuật chính để tạo ra animation có hai kỹ thuật là nội suy Key-Frame và Skinning.

4.3.Kỹ thuật tạo chuyển động nhân vật

4.3.1.Kỹ thuật nội suy Key-Frame

Một phần của tài liệu Xây dựng game engine đa nền tảng quản lý tài nguyên và chuyển động của các đối tượng (Trang 26 - 34)

Tải bản đầy đủ (DOC)

(53 trang)
w