วิธีที่ต้องการแสดงข้อความใน OpenGL [ปิด]


17

ฉันกำลังจะหยิบคอมพิวเตอร์กราฟิกขึ้นมาอีกครั้งสำหรับโครงการมหาวิทยาลัย สำหรับโครงการก่อนหน้านี้ฉันใช้ห้องสมุดที่เรียกว่าFTGLซึ่งไม่ทำให้ฉันพึงพอใจเพราะรู้สึกหนัก (ฉันลองเทคนิคการเรนเดอร์จำนวนมาก

คำถามของฉันคือมีห้องสมุดที่ดีและมีประสิทธิภาพสำหรับเรื่องนี้? ถ้าไม่เช่นนั้นจะมีวิธีใดที่จะใช้ข้อความที่รวดเร็ว แต่ดูดี? การใช้งานบางอย่างที่ตั้งใจคือ:

  • ฉลากวัตถุ / ตัวละครลอย
  • การหารือ
  • เมนู
  • ฮัด

แก้ไข: ยิ่งสามารถโหลดแบบอักษรได้


1
นี่คือ "เทคโนโลยีที่ใช้คำถาม" ดังนั้นจึงควรปิด
Laurent Couvidou

คำตอบ:


4

กรอบที่ได้รับความนิยมคือGUI ของ Crazy EddieGUI

แต่ในขณะที่มันน่าสนใจไม่ใช่เรื่องผิดปกติที่คุณจะม้วนตัวเอง (และอาจจะเสียใจเมื่อขอบเขตเพิ่มขึ้นในภายหลัง;)

เป็นเรื่องปกติที่จะมีร่ายมนตร์ของคุณบนบิตแมปแล้ววาดบิตแมปโดยใช้ OpenGL

บางครั้งคุณแสดงข้อความชั่วคราวที่อาจปรากฏสำหรับเฟรมจำนวนหนึ่งเท่านั้น แค่ใช้ GL_QUADS + glVertex ก็เพียงพอแล้ว แต่สำหรับข้อความจำนวนมากหรือการมองเห็นเป็นระยะเวลานานคุ้มค่าที่จะนำ GL_QUADS ไปใช้ใน VBO - ฉันได้สังเกตเห็นการปรับปรุงประสิทธิภาพที่ยิ่งใหญ่จากสิ่งนี้

แน่นอนว่ามีคำถามเกี่ยวกับการสร้างร่ายมนตร์จริงที่คุณต้องการ มีโปรแกรมอย่างbmfontที่คุณสามารถใช้ได้ หรือคุณอาจต้องการการเรนเดอร์ที่ค่อนข้างซับซ้อนเช่น freetype on demand ฉันใช้ bmfont กับนักแสดงของฉันเองอย่างมีความสุขมันตรงไปตรงมามากที่จะอนุมาน


9

มีหลายวิธี - ขึ้นอยู่กับสิ่งที่คุณต้องการ ... เช่นเดียวกับที่อื่นไม่มีสิ่งใดเหมือน "ทางออกที่ดีที่สุด" แพลฟอร์มของคุณคือเป้าหมาย? คุณใช้ภาษาอะไร การปรับขนาด / การหมุนข้อความเกี่ยวกับอะไร - จำเป็นหรือไม่ คุณต้องการแสดงผล TrueTypeFonts หรือไม่? Multilanguage / Unicode เกี่ยวกับอะไร คุณต้องการจัดเก็บข้อความของคุณอย่างไร (การเข้ารหัสใด ฯลฯ )

ฉันเคยใช้ FTGL ในอดีตเช่นเดียวกับ freetype บริสุทธิ์ (http://www.freetype.org/ FTGL เป็นพื้นฐานของสิ่งนี้) แบบอักษรบิตแมปชนิดต่าง ๆ แบบอักษรเค้าร่าง ... ตอนนี้ฉันส่วนใหญ่ติดบิตแมป แบบอักษร แต่นั่นเป็นเพียงการตั้งค่าส่วนตัวของฉัน เพราะฉันไม่ต้องการที่จะจัดการกับชุดอักขระการเข้ารหัสและสิ่งต่าง ๆ เช่นนั้นอีกต่อไป - การออกใบอนุญาตสำหรับบิตแมปฟอนต์ก็ง่ายและราคาถูกกว่าสำหรับ TrueTypeFonts และใช้ได้ในทุกรูปแบบที่สามารถโหลดภาพได้ ฉันใช้ quad ใน openGL และทำแผนที่เป็นส่วนหนึ่งของพื้นผิวของฉัน อีกด้านหนึ่งคือ: แบบอักษรนั้นจะปรับขนาดได้อย่างสะอาดเพียงแค่ปัจจัยที่มีค่า +/- 50% หากคุณสามารถอยู่กับที่ฉันขอแนะนำให้ใช้ bitmapfont

หากคุณต้องจัดการกับการเข้ารหัส / ชุดอักขระที่แตกต่างกันคุณควรหาวิธีในการโหลดและใช้ TrueTypeFonts (เช่นกับ freetype โดยใช้ไลบรารีอื่นหรือกับการดำเนินการของคุณเอง) ...

ดูที่ nehes แบบฝึกหัดต่าง ๆ ในหัวข้อนี้ด้วย

http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=13แบบอักษรบิตแมป

http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=14สรุปแบบอักษร

http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=15แบบอักษรพื้นผิวที่แมป

http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=17แบบอักษรพื้นผิว 2D

โชคดี!


+1 ขอบคุณสำหรับข้อมูลที่มีค่าเกี่ยวกับประสิทธิภาพฉันรู้เกี่ยวกับบทเรียนของ NeHe ฉันคิดว่าฉันใช้บิตแมปแบบอักษร ... แต่มันไม่ได้ปรับขนาด: ประมาณ 60 ป้ายกำกับที่ลอยอยู่ในฉากด้านบนของทรงกลมที่เข้าร่วมโดยบรรทัด (ฉันคิดว่าฉันควรจะมองหาวิธีที่จะใช้รูปแบบฟลายเวท)
dukeofgaming

1
ข้อควรระวัง: บทเรียนของ NeHe นั้นใช้สำหรับฟังก์ชั่นเก่าคงที่และไม่ได้รับการอัพเดทบ่อยครั้ง หากคุณกำลังมองหาโซลูชั่น OpenGL ที่ทันสมัยดูstackoverflow.com/questions/5262951/…
brita_

6

หากคุณต้องการใช้ฟอนต์บิตแมปคุณจะไม่ผิดไปอีกเลยกับตัวสร้างฟอนต์ Bitmap ของ Angelcode: http://www.angelcode.com/products/bmfont/

มันแปลงฟอนต์ truetype ให้เป็นพื้นผิวอย่างน้อยหนึ่งตัว (พร้อมกับ glyphs ที่บรรจุไว้อย่างดี) และส่งออกไฟล์เล็ก ๆ ที่มี UVs และ spacings (ฉันพบว่าเอาต์พุต XML นั้นใช้งานได้ง่ายเป็นพิเศษและคุณภาพของข้อมูลระยะห่างโดยทั่วไป ดีมากแม้ไม่มีการจัดช่องไฟที่แท้จริง)



0

พิจารณาQML มันเป็นห้องสมุด UI ที่ทำงานได้อย่างสมบูรณ์พร้อมกับไวยากรณ์ที่ใช้งานง่าย ชุดคุณลักษณะนั้นดีกว่า CEGUI อย่างมากในประสบการณ์ของฉันและมีเอกสารการสนับสนุนและชุมชนที่ดีขึ้นเนื่องจากเป้าหมายหลักคือแอปพลิเคชันเดสก์ท็อปและความสามารถในการแสดงผลนอกจอเป็นเพียงโบนัส

ข้อดี:

  • มันใช้ OpenGL ที่ด้านหลังสำหรับการแสดงผลทั้งหมด
  • มันสามารถโหลดแบบอักษรใด ๆ ที่มีอยู่ในระบบโฮสต์และยังสามารถแยกแบบอักษรเพิ่มเติมที่คุณรวมเป็นทรัพยากร
  • มันใช้การแสดงผลข้อความฟิลด์ระยะทางลงนามสำหรับการส่งออกที่มีประสิทธิภาพและมีคุณภาพสูง
  • มันสามารถแสดงผลโดยตรงกับพื้นผิว OpenGL เพื่อให้คุณสามารถวางผลลัพธ์ในสภาพแวดล้อมเกมของคุณได้อย่างง่ายดาย
  • Qt มีการผูกภาษาจำนวนมาก

จุดด้อย:

  • Qt เป็นกรอบที่ใหญ่
  • การใช้ QML ในโครงการ Direct3D หรือ Vulkan นั้นต้องใช้การกระโดดผ่านห่วงเพื่อนำพื้นผิว GL ไปใช้ API ที่เหมาะสม (หรือรอให้ใครบางคนเขียน renderers D3D / Vulkan ดั้งเดิมสำหรับ QML)
  • ยังมีนิสัยใจคอเล็กน้อยใน QML ที่จะพยายามใช้การควบคุมแบบเนทีฟแม้ว่าคุณกำลังเรนเดอร์ไปยังพื้นผิวหน้าจอเช่นเมื่อคุณพยายามเปิดรายการดร็อปดาวน์สำหรับรายการ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.