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 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ó?
Câu trả lời:
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ẻ.
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.
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