Saturday, 6 November 2010

[XNA]Đồ hoạ 2D

XNA
add text, images, video, widgets, etc...


Hệ tọa độ 2D


Có thể ai cũng biết về hệ tọa độ 2-D trong hình học. Nhưng hệ tọa độ để tạo trò chơi thì khác. Điểm khác nhau giữa hệ tọa độ ở trên và hệ tọa độ tạo trò chơi 2-D (được gọi là hệ tọa độ  màn hình) 

XNA framework hỗ trợ chúng ta thao tác trên đối tượng 2D một cách dễ dàng.

Một số định nghĩa


 Sprite
Sprite là một hình ảnh thường dùng để hiển thị thông tin như: thanh trạng thái của đối tượng, số mạng sống, chú thích, điểm số. Để vẽ sprite, chúng ta phải tạo đối tượng Texture2D. Ta có thể hiệu chỉnh sprite như: tạo màu sắc, thực hiện phép quay,  phép tỉ lệ bằng phương thứcDraw. Sau khi vẽ sprite, gọi phương thức End trước khi gọi phương thức Present.
  Gốc Sprite (Sprite Origin)
Khi vẽ sprite, gốc sprite là khái niệm quan trọng. Gốc là một điểm cụ thể trên sprite được mặc định ở góc trên bên trái của sprite hoặc tại tọa độ (0,0) . Phương thức Draw vẽ gốc của sprite tại vị trí được chỉ định trên màn hình.
      Ví dụ: nếu ta vẽ pixel sprite 50x50 tại tọa độ (400,200) mà không xác định gốc, góc trên bên trái của sprite  sẽ là điểm (400,200). Nếu dùng điểm trung tâm của sprite 50x50 với gốc là (25,25), để vẽ sprite tại vị trí đó, ta phải cộng thêm tọa độ gốc. Trong trường hợp này, vị trí là (425,425) và gốc là (25,25)
 Độ sâu Sprite (SpriteDepth)
Sprite cũng có khái niệm độ sâu. Khi vẽ sprite, chúng ta có thể xác định độ sâu giữa 0 và 1 (đây là một số thực). Sprite vẽ tại độ sâu 0 nằm “ trước ” màn hình và sẽ phủ vài sprite vẽ ở độ sâu thấp hơn. Sprite ở độ sâu 1  nằm “ sau ” màn hình và sẽ bị phủ bởi những sprite vẽ ở độ sâu nhỏ hơn 1.
   Sprite Batching
Thông thường, đối tượng SpriteBatch không thay đổi vài trạng thái tạo hoặc vẽ sprite cho đến khi gọi phương thức End. Điều này được gọi là chế độ Deferred. Ở chế độ Deferred, SpriteBatch lưu các thông tin mỗi khi gọi phương thức Draw cho đến khi gọi phương thức End. Khi gọi phương thức End, SpriteBatch thay đổi các thiết bị cài đặt đồ họa và vẽ mỗi sprite một loạt. Sau đó, phương thức End trả về những thiết lập ban đầu nếu ta chỉ định SaveStateMode.SaveState.
Nếu gọi phương thức Begin, xác định SpriteSortMode.Immediate, nó tạo chế độ Immediate. Trong chế độ Immediate, ngay lập tức SpriteBatch thay đổi trạng thái thiết bị đồ họa để bắt đầu vẽ sprite. Sau đó, mỗi lần gọi phương thức Draw, nó vẽ sprite bằng cách sử dụng các thiết bị cài đặt hiện tại. Phương thức End trả về những thiết lập thiết bị ban đầu nếu ta chỉ định SaveStateMode.SaveState.
Ở chế độ Immediate, một khi gọi phương thức Begin trên một thể hiện (instance) SpriteBatch, chúng ta không được gọi nó ở thể hiện SpriteBatch khác, cho đến khi gọi phương thức End cho SpriteBatch đầu tiên.
Chế độ Deferred chậm hơn chế độ Immediate, nhưng nó cho phép nhiều thể hiện của SpriteBatch chấp nhận phương thức Begin và Draw mà không cản trở lẫn nhau.
  Sprite Blend Modes:
Chế độ trộn có thể tạo ra AlphaBlend, Additive, None. Chế độ trộn (blend) mặc định là AlphaBlend.
  Sprite Sort Mode:
Chế độ sắp xếp quyết định các ảnh (sprite) được vẽ hiển thị trên hình ảnh. Trước đây, các nhà phát triển trò chơi phải cẩn thận để đảm bảo việc các hình ảnh hiển thị trên màn hình phải được sắp xếp, pha trộn màu nền và bề mặt một cách chính xác. Ngày nay, với sự hiểu biết về XNA sẽ giúp chúng ta làm công việc này đơn giản hơn.
Các chế độ sắp xếp có thể thiết lập: BackToFront, Deferred, FrontToBack, Immediate và Texture.
-Chế độ sắp xếp mặc định là Deferred khi chúng ta gọi phương thức Begin  không có tham số.
- Immediate cập nhật việc thiết lập thiết bị đồ họa ngay lập tức khi phương thức Begin  được gọi.
      - Chế độ BackToFront và FrontToBack. Khi chúng ta vẽ ảnh, chúng ta có thể thiết lập độ sâu của ảnh. Giá trị này là một số thực giữa 0.0 và 1.0.
               + BackToFront dùng cho hình ảnh trong suốt.
               + FrontToBack dùng cho hình ảnh không trong suốt.
      - Chế độ Texture sẽ kiểm tra tất cả hình ảnh được yêu cầu và sắp xếp chúng.
  Sprite Transformation Matrices
XNA Game Studio bao gồm một tính năng cho hàng loạt sprite, khả năng xác định chuyển đổi ma trận có thể áp dụng cho mỗi sprite trước khi vẽ. Việc chuyển đổi ma trận có thể được kết hợp với phép tịnh tiến (translation), phép xoay (rotation), hoặc phép tỉ lệ (scaling)  ma trận nhân với nhau thành một ma trận đơn. Đây là ma trận kết hợp với các tham số vị trí, phép xoay, phép tỉ lệ và chiều sâu của sprite để cung cấp cho phương thức Draw. Bởi vì ma trận cũng áp dụng chiều sâu, sự chuyển đổi tọa độ để làm cho độ sâu sprite lớn hơn 1.0 hoặc nhỏ hơn 0.0 sẽ làm sprite biến mất.
  Sprite Fonts
XNA Game Studio cho phép vẽ văn bản bằng cách sử dụng SpriteBatch. Phương thức DrawString sẽ vẽ văn bản trên màn hình với vị trí, màu sắc, góc quay, gốc, và hệ số tỉ lệ. Phương thức DrawString cũng yêu cầu loại texture của lớp SpriteFont. SpriteFont được tạo ra bởi Content Pipeline khi ta thêm một tập tin Sprite Font vào ứng dụng của mình. Các tập tin Sprite Font có các thông tin như tên và  kích cỡ của phông chữ, và trong đó bao gồm các ký tự Unicode trong texture SpriteFont. Khi chạy ứng dụng, một SpriteFont được nạp với ContentManager.Load giống như một đối tượng Texture2D.

No comments:

Post a Comment