Làm cách nào để tránh các giá trị pixel phụ trong trò chơi 2D độc lập có độ phân giải với phép chiếu chính tả?


8

Tôi đang cố gắng thực hiện độ phân giải độc lập của các họa tiết di chuyển trong trò chơi 2D. Kế hoạch của tôi là làm việc trong một hệ tọa độ cố định trong thế giới của tôi (ví dụ: 960x540) và sử dụng phép chiếu chính tả để điều chỉnh tỷ lệ lên hoặc xuống để phù hợp với chế độ xem. Tôi làm hộp thư để xử lý các tỷ lệ khung hình khác nhau.

Theo hầu hết các hướng dẫn, tôi có thể tự do sử dụng bất kỳ kích thước nào tôi thích cho chế độ xem, nhưng tôi thấy rằng trong nhiều trường hợp dẫn đến vấn đề tôi kết thúc bằng cách sử dụng các giá trị subpixel trên chế độ xem. Ví dụ: một đỉnh tại (62,62) trong hệ tọa độ 960 x 540 kết thúc tại (51.6666667,51.6666667) trên chế độ xem với kích thước 800 x 450.

Tôi nhận thấy hai loại vấn đề với điều đó:

  • lấy mẫu kết cấu thay đổi tất cả thời gian cho các đối tượng đang chuyển động tùy thuộc vào vị trí các đỉnh có liên quan đến tâm pixel
  • Thỉnh thoảng các đối tượng của tôi bị kéo dài theo chiều ngang hoặc chiều dọc bởi một pixel do làm tròn

Cách thực hành tốt nhất để tránh điều này (trong khi duy trì độ độc lập độ phân giải về tốc độ di chuyển và vân vân) là gì? Và nơi nào sẽ là nơi tốt nhất để làm điều này? Trước khi truyền các đỉnh cho các shader hoặc bên trong các shader đỉnh?


Làm thế nào bạn thực hiện thay đổi kích thước và bản dịch để phù hợp với chế độ xem mới? Ma trận? Thủ công nhân rộng và di chuyển vị trí đối tượng?
Tiểu vương quốc Lima

@EmirLima Tôi nhân các tọa độ bằng một ma trận mô hình-khung nhìn-chiếu-ma trận kết hợp bên trong shader đỉnh của tôi. Tất cả các tỷ lệ được thực hiện bởi ma trận chiếu chính tả.
Eric

bạn có thể làm tròn hoặc sàn các coords, (có thể trong shader
đỉnh

@ tm1rbrt Cảm ơn bình luận của bạn. Tôi nghĩ rằng tôi phải luôn luôn là sàn hoặc trần để tránh 1 pixel nhiều hơn hoặc ít hơn về chiều rộng hoặc chiều cao. Tôi đã thử làm điều đó bên trong shader đỉnh, nhưng sự thiếu chính xác trong tính toán ở đó làm cho điều đó trở nên khó khăn nếu không muốn nói là không thể. Tôi đã kết thúc sàn những gì nên là số nguyên hoàn hảo cho số nguyên trước đó.
Eric

Câu trả lời:


1

Để đi đến câu hỏi chính của bạn, có hay không ảnh hưởng đến các đỉnh trước hoặc trong khi đổ bóng, sử dụng trình đổ bóng được ưu tiên. Nếu bạn biết cách viết một thói quen có thể tính đến hệ thống khung nhìn và tọa độ, sử dụng một shader được ưu tiên vì nó cho phép nhiều sprite được điều chỉnh song song. Ngoài ra, nó đảm bảo tọa độ "mỹ phẩm" tách biệt với tọa độ trong trò chơi trong mã CPU để người này không ảnh hưởng đến người khác.

Bạn có thể làm điều này trong phần đổ bóng HOẶC pixel. Trong trình đổ bóng pixel, có thể dịch chuyển texels để khóa chúng thành các pixel trên màn hình.

Trong DirectX9, tôi cần thực hiện điều này với HLSL để giải quyết vấn đề rằng các góc texel nằm ở 0,5, 0,5 so với pixel , làm cho kết cấu sắc nét trông mờ hơn. Sửa lỗi này thay đổi vị trí vật lý của các texels mà không di chuyển các đỉnh.

Trong trường hợp của bạn, phần bù sẽ thay đổi từ khung này sang khung khác, vì vậy hãy chuyển tọa độ thực của sprite cho shader để tính toán bù thập phân. Nhớ CLAMP lấy mẫu kết cấu để tránh bọc trong kết cấu.


3

Tôi nghĩ rằng tôi sẽ lưu trữ hai bộ tọa độ.

  1. Một cái được sử dụng để vẽ các đối tượng của bạn DISPLAY POSITION
  2. một giây được sử dụng để giữ a TRUE POSITION.

Bằng cách này, bạn có thể vẽ các họa tiết với tọa độ tròn để loại bỏ sự biến dạng gây ra bởi kích thước cố định của khu vực xem của bạn.

Nhưng điều này cũng cho phép bạn giữ vị trí chính xác mà không ảnh hưởng đến bất kỳ logic trò chơi nào của bạn. do tính chất của các pixel phụ, tôi cũng nghĩ rằng bạn thậm chí sẽ không nhận thấy bất kỳ sự khác biệt nào giữa chế độ xem và logic trò chơi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.