Hiển thị độ phân giải văn bản độc lập


11

Tôi cần một cách để vẽ văn bản độc lập độ phân giải trong trò chơi của tôi. Đó là, tôi cần có khả năng phóng to văn bản và không bao giờ nhìn thấy các tạo tác pixel.

Bất cứ ai có thể đưa ra bất kỳ đề nghị về làm thế nào tôi có thể đi về nó?


Tôi cho rằng bạn cần xem xét các phương pháp của phông chữ dựa trên vectơ, thay vì phông chữ rasterized, có thể là điểm khởi đầu. Tôi không phải là chuyên gia về vấn đề này, vì vậy tôi sẽ để ai đó biết câu trả lời.
Ray Dey

Câu trả lời:


7

Có ba cách phổ biến để làm điều đó. Đó thực sự không phải là loại bỏ hoàn toàn các tạo phẩm - điều này là không thể, trừ khi bạn có bộ nhớ hoặc thời gian xử lý không giới hạn - mà là làm thế nào để giảm thiểu chúng theo cách phù hợp với nền tảng mã và mục tiêu hiện tại của bạn.

Đầu tiên, chỉ cần sử dụng trình tạo phông chữ của bạn - thường là FreeType - để rasterize phông chữ ở kích thước bạn muốn khi bạn phóng to. Điều này sẽ trông tuyệt vời trong ảnh chụp màn hình, nhưng nó cực kỳ chậm. Bạn có thể giải quyết sự chậm chạp bằng các kích thước bộ đệm, nhưng sau đó nó trở nên cực kỳ đói bộ nhớ. Nó cũng không trông tuyệt vời trong chuyển động, bởi vì làm cho glyphs trông tốt cho màn hình tĩnh đòi hỏi phải thu nhỏ chúng không đồng đều. Tuy nhiên, đó là một tùy chọn nếu bạn đang ở trên một nền tảng có đủ bộ nhớ (như PC) và tỷ lệ của bạn được giới hạn trong một phạm vi nhỏ, như 10px đến 30px. Phương pháp này cũng không thừa nhận rất nhiều kẹo mắt.

Thứ hai, bạn có thể lưu trữ văn bản của bạn dưới dạng lưới. Một số thư viện tồn tại để làm điều này, như GLTT , hoặc bạn có thể tự viết. Bây giờ bạn không còn có các tạo phẩm pixel nữa, nhưng bạn sẽ có các tạo tác đa giác nếu bạn phóng to rất gần - giống như bất kỳ lưới nào khác trong trò chơi 3D. Văn bản lưới thừa nhận rất nhiều kẹo mắt vì các bóng đỉnh có thể được áp dụng và lưới có thể được xen kẽ với bất kỳ bản vẽ thế giới nào khác mà bạn làm. Nó khá nhẹ trên bộ nhớ và CPU, và dễ dàng đo lường chi phí vì nó chỉ là một lưới tiêu chuẩn. Nó có thể là một nỗi đau để tích hợp vào một đường ống kết xuất 2D dựa trên sprite bình thường.

Thứ ba, bạn có thể sử dụng các trường khoảng cách kết hợp với trình đổ bóng pixel . Đây là một kỹ thuật tương đối mới hiện đang phổ biến, sử dụng trình đổ bóng đơn giản để lấy mẫu kết cấu có sẵn và bộ lọc song tuyến "miễn phí" trên thẻ video của bạn để tăng tỷ lệ glyphs một cách sạch sẽ. Nó sử dụng bộ nhớ ít và dễ dự đoán so với các phương thức khác - kết cấu 0,5 MB đến 1 MB cho mỗi bộ ký tự cho mỗi phông chữ. Nó phù hợp độc đáo với các đường ống kết xuất dựa trên sprite vì nó dựa trên sprite; mỗi glyph vẫn là một quad kết cấu. Nó không tạo ra các tạo phẩm pixel, nhưng rất ít so với các phương pháp khác chia tỷ lệ họa tiết. Ngoài ra còn có một dự phòng chức năng cố định nếu các pixel shader không có sẵn, nhưng văn bản kết thúc rất bí danh. Bởi vì việc lấy mẫu được thực hiện trong một pixel shader, nó thừa nhận một số kẹo mắt, như phác thảo và tạo bóng, với giá rẻ.


3

Ngoài ra còn có một bài viết nghiên cứu từ Microsoft Research của Loop và Blinn, về kết xuất các đường cong độc lập độ phân giải bằng cách sử dụng các shader. Nó gợi ý sử dụng kỹ thuật được trình bày để hiển thị văn bản TrueType theo cách phân giải độc lập.


1

Bạn sẽ cần xây dựng các ký tự phông chữ của mình từ sự kết hợp của các đường cong và đường thẳng, sau đó bạn chuyển đổi thành hình học với mức độ chi tiết phù hợp khi chạy.

May mắn là hầu hết các phông chữ đã được xây dựng từ các đường cong bezier. Để có được dữ liệu đường cong, bạn chỉ cần sử dụng hàm Windows GetGlyphOutline () tiêu chuẩn để trích xuất chúng.

Tôi không chắc liệu bạn có thể lấy dữ liệu đường cong đó từ C # mà không cần PInvoke hay không.


1
Để tạo nền tảng chéo này và không phải lo lắng về công cụ PInvoke, đối với tôi, bạn có thể viết một công cụ để chuyển dữ liệu mà GetGlyphOutline đọc (xem câu hỏi SO này ) sang một số định dạng tùy chỉnh, sau đó có một số tệp I / O đơn giản trong mã trò chơi để tải dữ liệu glyph được lưu trữ tùy chỉnh của bạn.
Ricket

0

Bạn có thể muốn xem qua freetype. Tôi không biết liệu nó có sẵn trên nền tảng của bạn hay nếu giấy phép có thể áp dụng được không nhưng đó là một thư viện mã nguồn mở khá tuyệt vời để hiển thị kiểu chữ thật và các phông chữ vector khác. Tôi tin rằng họ đã phải thực hiện một số luật sư thông minh né tránh mã để có được phông chữ để hiển thị một cách thẩm mỹ. Cách thức thực sự liên quan đến mã byte trên các đường cong để cung cấp gợi ý cho trình kết xuất để các tính năng phông chữ quan trọng (như dọc và serif) không bị mờ đi khi chúng sử dụng khử răng cưa ngây thơ tiêu chuẩn. Kỹ thuật đó có bằng sáng chế về nó nên những người freetype đã phải nghĩ ra một thứ khác đã làm công việc đó và không gọi ra luật sư khủng khiếp của (tôi nghĩ) Apple. Dù sao, gạt bỏ pháp lý sang một bên, thử nhìn vào freetypehttp://freetype.sourceforge.net/index2.html

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.