Tôi có một công cụ trò chơi 2D vẽ các hình chữ nhật bằng cách vẽ các hình xếp từ hình ảnh xếp hình. Bởi vì theo mặc định, OpenGL chỉ có thể bao bọc toàn bộ kết cấu ( GL_REPEAT
) và không chỉ là một phần của nó, mỗi ô được chia thành một kết cấu riêng biệt. Sau đó, các vùng của cùng một ô được hiển thị liền kề nhau. Đây là những gì nó trông giống như khi nó hoạt động như dự định:
Tuy nhiên, ngay khi bạn giới thiệu tỷ lệ phân đoạn, các đường nối xuất hiện:
Lý do tại sao điều này xảy ra? Tôi nghĩ rằng đó là do lọc tuyến tính pha trộn các đường viền của các hình tứ giác, nhưng nó vẫn xảy ra với lọc điểm. Giải pháp duy nhất tôi tìm thấy cho đến nay là đảm bảo tất cả định vị và chia tỷ lệ chỉ xảy ra ở các giá trị nguyên và sử dụng lọc điểm. Điều này có thể làm giảm chất lượng hình ảnh của trò chơi (đặc biệt là định vị pixel phụ không còn hoạt động nên chuyển động không được mượt mà).
Những điều tôi đã thử / xem xét:
- khử răng cưa giảm, nhưng không loại bỏ hoàn toàn, các đường nối
- tắt mipmapping, không có tác dụng
- hiển thị từng ô riêng lẻ và đùn các cạnh bằng 1px - nhưng đây là tối ưu hóa, vì nó không còn có thể hiển thị các vùng của gạch trong một lần và tạo các vật phẩm khác dọc theo các cạnh của các khu vực trong suốt
- thêm viền 1px xung quanh ảnh nguồn và lặp lại các pixel cuối cùng - nhưng sau đó chúng không còn là sức mạnh của hai, gây ra sự cố tương thích với các hệ thống không có hỗ trợ NPOT
- viết một shader tùy chỉnh để xử lý các hình ảnh lát gạch - nhưng sau đó bạn sẽ làm gì khác?
GL_REPEAT
nên lấy pixel từ phía đối diện của hình ảnh ở viền và không chọn độ trong suốt. - hình học là chính xác liền kề, không có lỗi làm tròn điểm nổi.
- nếu shader mảnh được mã hóa cứng để trả về cùng màu, các đường nối sẽ biến mất .
- nếu kết cấu được đặt thành
GL_CLAMP
thay vìGL_REPEAT
, các đường nối sẽ biến mất (mặc dù kết xuất bị sai). - nếu kết cấu được đặt thành
GL_MIRRORED_REPEAT
, các đường nối sẽ biến mất (mặc dù kết xuất lại bị sai). - Nếu tôi làm nền đỏ, các đường may vẫn trắng. Điều này cho thấy nó lấy mẫu màu trắng đục từ một nơi nào đó chứ không phải trong suốt.
Vì vậy, các đường nối chỉ xuất hiện khi GL_REPEAT
được thiết lập. Đối với một số lý do chỉ trong chế độ này, tại các cạnh của hình học có một số chảy máu / rò rỉ / trong suốt. Làm thế nào mà có thể được? Toàn bộ kết cấu mờ đục.
GL_NEAREST
lấy mẫu R
theo hướng tọa độ cũng hoạt động giống như kết cấu mảng cho hầu hết mọi thứ trong kịch bản này. Mipmapping sẽ không hoạt động, nhưng đánh giá bằng ứng dụng của bạn, có lẽ bạn không cần mipmap.