2013-04-28 53 views
5

Tôi bắt đầu làm việc tại công ty này sử dụng triển khai 2D OpenGL để hiển thị dữ liệu của hệ thống (chạy trên Windows.) Toàn bộ hệ thống được xây dựng với C++ (sử dụng C++ Builder 2007). Có điều là, tất cả các văn bản họ in có pixelized khi bạn phóng to, mà tôi nghĩ sẽ xảy ra bởi vì các văn bản là một bitmap:Phông chữ dựa trên Vector trên OpenGL

Example of the view

Từ những gì tôi biết họ sử dụng các tập tin phông chữ tương tự như Windows không. Tôi hỏi xung quanh đây về lý do tại sao điều này xảy ra và câu trả lời tôi nhận được là anh chàng đã thực hiện nó (không hoạt động ở công ty nữa) nói phông chữ trên OpenGL rất khó và đây là điều tốt nhất mà anh ấy có thể làm hoặc điều gì đó giống như vậy.

Câu hỏi của tôi là: có cách nào đơn giản và hiệu quả để làm cho văn bản cũng là véc-tơ (giống như cách các dòng trong hình ảnh không?) Vì vậy, khi tôi phóng to máy ảnh, điều này xảy ra rất nhiều, chúng không pixelize. Tôi có ít kiến ​​thức về OpenGL và nếu bạn có một số hướng dẫn và/hoặc hướng dẫn liên quan đến điều này để hướng tôi đi đúng hướng tôi sẽ rất biết ơn. Về cơ bản, bất kỳ tài liệu nào cũng tuyệt vời.

+1

Vấn đề chính với OpenGL là phông chữ được xử lý rất không nhất quán trên nền tảng và hỗ trợ cho chúng là tối thiểu - nhưng có thể có 3 thư viện của bên thứ ba dành cho điều này (SDL và GLEW cung cấp hỗ trợ, IIRC) – Polar

+0

I ' sẽ tìm những thư viện đó, cảm ơn! – dccarmo

+0

@AkiSuihkonen nếu bạn tìm thấy chúng, hãy chia sẻ ở đây! Cảm ơn! – dccarmo

Trả lời

10

Hầu hết các thư viện kết xuất văn bản OpenGL đều có: tạo bitmap cho phông chữ, điều này có nghĩa là bạn sẽ gặp vấn đề với chia tỷ lệ và bí danh trừ khi bạn thực hiện một số hacks.One của hack phổ biến là của Van approach. khoảng cách lĩnh vực algo để tạo ra phông chữ bitmap của bạn mà sau đó sẽ giúp bạn mịn văn bản phác thảo trên quy mô trong khi rendering. Here bạn có thể tìm thấy việc thực hiện C++ cho việc tạo trường khoảng cách.

Nếu bạn dính vào phần cứng của nhà cung cấp cụ thể và đó là NVidia, bạn có thể thử tiện ích mở rộng NVidia Path cho phép hiển thị đồ họa trực tiếp trên GPU. Hãy nhớ rằng, đó là điều duy nhất của NVIDIA. Nhưng nói chung, phương pháp tiếp cận dựa trên trường khoảng cách đã ký là trơn tru và dễ thực hiện nhất.

Btw, freetype-gl sử dụng phương pháp của Valve và cũng là đường ống hiện đại.

+0

Cảm ơn lời giải thích, Michael. Nó rõ ràng hơn với tôi bây giờ.Tôi chắc chắn sẽ kiểm tra tất cả các liên kết, mặc dù giải pháp NVidia là quá cụ thể quá dự án của chúng tôi, tôi sẽ đọc về nó chỉ để có được một số quan điểm anyway. – dccarmo

+0

Ngoài ra còn có phương thức Vector Texture Maps http://alice.loria.fr/index.php/[email protected] – datenwolf

-1

Vấn đề với việc sử dụng phông chữ trong OpenGL là chúng được xử lý không nhất quán trên các nền tảng và chúng có hỗ trợ tối thiểu. Nếu bạn sẵn sàng đi với một thư viện trợ giúp cho OpenGL (SDL), hành vi này có thể sẽ được bao bọc, nghĩa là bạn chỉ cần cung cấp một tệp phông chữ phù hợp để họ sử dụng.

+3

GLEW không có gì để làm với phông chữ. –

+0

@NicolBolas Không chắc chắn rằng nó đã hỗ trợ phông chữ, chỉ cần sử dụng nó như là một ví dụ về một thư viện trợ giúp. – Polar

+1

Sau đó xóa nó khỏi câu trả lời của bạn, vì nó không trả lời câu hỏi (đó là về hiển thị phông chữ). –

4

Bạn có thể thử freetype-gl thư viện của nó để hiển thị phông chữ trong OpenGL.

+0

Tôi sẽ thử vào ngày mai và sau đó báo cáo lại, nhưng khi những người khác đề cập đến thư viện này có vẻ là giải pháp. Cảm ơn! – dccarmo

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