2013-01-01 28 views
5

Tôi sẽ bắt đầu với một hình ảnh:phông chữ xấu xí sau khi thay đổi kích thước, OpenGL

enter image description here

hình ảnh trên trình bày văn bản đạt được trong hai cách khác nhau, cả hai đều sử dụng cùng một loại font chữ - Arial, đậm, kích thước 11

Phần ở dưới cùng được tạo trong chương trình chỉnh sửa hình ảnh và một ở đầu ứng dụng OpenGL của tôi. Để được chính xác hơn, sử dụng FTExtrudeFont từ thư viện FTGL:

font_ptr font(new FTExtrudeFont(filename.c_str())); 

Câu hỏi của tôi là, tại sao là nó rút ra như thế này? Tôi cho rằng lý do cho điều này có thể là các thuật toán thay đổi kích thước khác nhau, nhưng nếu có, làm thế nào tôi có thể đạt được phông chữ đẹp hơn này (phần dưới cùng) trong ứng dụng OpenGL của tôi?

EDIT:

Để làm cho một phông chữ, tôi chỉ gọi một chức năng này:

font->Render(text,   // Text to be displayed 
      -1,   // Line length, which by default is left as -1 
      pos);   // Position in which to draw text 
+0

Bạn có cần phông chữ ép đùn không? Bạn có thể thử phông chữ vectơ thông thường hoặc phông chữ được kết cấu và xem bạn có nhận được kết quả tốt hơn không? – WildCrustacean

+0

@bde Tôi đã thử font chữ kết cấu, nhưng nó chống răng cưa mà trong trường hợp này là không tốt cho tôi, vì tôi cần phác thảo màu đen thực sự sắc nét. –

Trả lời

3

này trông giống như một cái gì đó mà có thể được gây ra bởi các mẫu kết cấu trong OpenGL. Nó xảy ra khi kết cấu bạn vẽ (một phông chữ, trong trường hợp này) không phải là kích thước giống như quad bạn vẽ nó.

Giải pháp dễ dàng: đảm bảo rằng kích thước họa tiết khớp với khu vực được vẽ trên màn hình. Không hiển thị phông chữ 14px đến khu vực 12px nhưng sử dụng phông chữ 12px hoặc khu vực 14px.

Trong câu hỏi của bạn, bạn đề cập rằng phông chữ của bạn là 'kích thước 11'. Tôi không biết các chi tiết của thư viện FTGL, nhưng tôi cho rằng có một cuộc gọi sẽ cho bạn biết kích thước tốt nhất cho một chuỗi cụ thể mà bạn có thể vẽ. Không sử dụng toán học của riêng bạn để tính toán, sử dụng thư viện. Miễn là bạn có kích thước đúng, vấn đề bạn đang gặp phải không xảy ra.

+0

Cảm ơn bạn đã trả lời, nhưng tôi nghĩ tôi không thể làm điều đó vì hàm duy nhất tôi gọi để hiển thị là (từ thư viện FTGL): font-> Render (văn bản, -1, pos); Vì vậy, tôi không nghĩ rằng tôi có bất kỳ cách nào để sửa đổi vùng hiển thị. –

+0

Như tôi đã nói, tôi không biết nhiều về thư viện FTGL, nhưng có thể bạn đang sử dụng ma trận modelview/chiếu sai, khiến việc chuyển đổi từ đỉnh sang vị trí pixel bị sai? * Cái gì đó * đang gây ra (các) texture để lấy mẫu. –

+0

Tôi không có ý tưởng làm thế nào tôi có thể thực sự kiểm tra nếu tôi đang sử dụng "ma trận modelview sai" như bạn nói. Từ những gì tôi thấy, mọi thứ khác có vẻ chính xác - tôi cũng đang sử dụng các họa tiết khác để vẽ hình nền của các thành phần gui và chúng được hiển thị đúng cách (ý tôi là, các pixel nằm ở đúng vị trí). –

Các vấn đề liên quan