Tôi đang triển khai GUI được xây dựng trên đầu OpenGL. Tôi đã gặp phải vấn đề mà mỗi GUI sẽ có - hiển thị văn bản. Tôi biết một số phương pháp rendering văn bản trong OpenGL, tuy nhiên, tôi là wonderin mà trong số họ sẽ là phù hợp nhất cho một GUI.Làm cách nào để hiển thị văn bản trực tiếp OpenGL cho GUI?
Nói chung trong GUI, chúng tôi có hai loại văn bản - tĩnh và trực tiếp. Tĩnh đủ dễ dàng - chúng ta có thể kết xuất TTF thành một texture và quên nó đi. Đó là văn bản "sống" khiến tôi bận tâm hơn - hãy tưởng tượng bảng điều khiển hoặc trò chuyện trực tiếp trong trò chơi nhiều người chơi.
Tôi nghĩ đến một vài lựa chọn:
- không có trường hợp đặc biệt - hiển thị và tải một kết cấu mỗi lần thay đổi văn bản, giữ trong tâm trí chỉ để rerender nó khi văn bản thực sự mới xuất hiện, và cố gắng để phân chia các văn bản lớn hơn thành các phần nhỏ (như mỗi dòng trò chuyện). Tuy nhiên, điều này sẽ vẫn khiến chúng tôi bị treo trong các trường hợp như dòng số thay đổi mọi lúc hoặc văn bản giới thiệu hiển thị "trên mỗi ký tự" (kiểu máy đánh chữ được thấy trong một số trò chơi khoa học viễn tưởng)
- quad-per character - this cũng có vẻ là một giải pháp phổ biến, bạn chuẩn bị một kết cấu với bảng ASCII và hiển thị một ký tự quad. Tuy nhiên, tôi có những nghi ngờ nghiêm trọng về hiệu quả của giải pháp như vậy. Lời khuyên làm thế nào để làm cho nhanh hơn cũng sẽ được chào đón.
- giải pháp lai - tuy nhiên tôi không có ý tưởng làm thế nào để thực hiện điều đó sạch
Câu hỏi đặt ra do đó là - làm thế nào để làm cho văn bản trong OpenGL một cách hiệu quả?
Nếu điều này giúp, tôi đang viết mã trong STL/Boost-heavy C++ và nhắm vào GForce 6 và các card đồ họa sau này.
ĐỪNG xây dựng kết cấu lớn với tất cả các glyphs thể trên chúng. Trong khi nó dễ dàng và 'hợp lý' cho phông chữ phương Tây, nếu bạn cố gắng quốc tế hóa ứng dụng của bạn, bạn nhanh chóng nhận ra rằng phương pháp này là không bền vững với phông chữ phía đông. Giải pháp có thể mở rộng duy nhất là tạo văn bản động, khi cần thiết. –
Nếu bạn cố gắng tự mình render từng glyph, bạn sẽ bỏ qua mọi thứ mà hệ điều hành biết về các điểm nhấn, dấu trọng âm và các ký tự kết hợp, các kịch bản từ phải sang trái, và một số kiểu bố cục khác mà tôi đang quên. . Có thể không có bảng văn bản với 0-9a-zA-Z với dấu chấm câu để bao gồm một số trường hợp thực sự phổ biến, nhưng hầu hết thời gian bạn có được kiểu đẹp hơn khi bạn hỏi trình kết xuất phông chữ cho toàn bộ dòng hoặc đoạn. – codewarrior