مشكلة في تقديم نص Unicode غير الإنجليزية باستخدام خط FreeType على OpenGL

StackOverflow https://stackoverflow.com/questions/2219952

سؤال

أنا حاليا بعد درس تعليمي Nehe 43 ( http://nehe.gamedev.net/data/lessons/nesson.asp؟lesson=43.). يعمل الرمز بشكل مرض فقط لنص اللغة الإنجليزية وليس اللغات المحوظة. لحسن الحظ، أنا اتبع رابطا من درس Nehe 43 http://www.cs.northwestern.edu/~sco590/fonts_tutorial.html. ووجد عينة تعليمية متطابقة أخرى مع اختلاف واحد فقط: يستخدم W_CHAR، ويدعي الموقع أنه يمكنك تشغيل لغة أخرى غير الإنجليزية.

لذلك أنا أعطيه محاولة:

freetype::print(our_font, 320, 200, (unsigned short*)L"Active FreeType Text หกโด้กี่ดุ öáæé おはよ。- %7.2f", cnt1);

الوظيفة مطبعة مساحة الاسم FreeType. لديه الحجة الرابعة باسم * const غير موقعة قصيرة ** لذلك أنا ما ئترو. أنا أيضا وضعت L أمام سلسلة مزدوجة مقتبسة لشخصيات طويلة ووضعها في بعض الشخصيات الآسيوية لغرض الاختبار.

والنتيجة هي أن كل النص الإنجليزي يمكن أن يتم عرضه على ما يرام، ولكن كل الأحرف التايلاندية تصبح [] B [] [] [] 5h [] 8". [] صناديق مربع. من ما أفهمه، هذا يعني أن الخط لا يحتوي على اللغة المحددة، لذلك جربت الخطوط الأخرى، ولكن جميع الخطوط التايلاندية الأخرى تعطي هذه المربعات نفسها نفسها. للخط الياباني، هو نفسه. جميع الصناديق جنبا إلى جنب مع بعض الشخصيات الإنجليزية بجانبها. يتم تقديم Substring Oáæé بشكل جيد دون أي مشكلة.

هل نسيت شيئا هنا؟ كيف يمكننا عرض لغة يونيكود غير الإنجليزية هنا؟

هل كانت مفيدة؟

المحلول

لحسن الحظ، قام المؤلف بتحميل إصدار معدلة من البرنامج التعليمي الخاص به في موقع الويب الخاص به (المحدد في السؤال) ويستخدم wchar_t (في الإصدار الأصلي، يستخدم المؤلف * CONSS غير موقعة قصيرة ** كوسيطة في وظيفة الطباعة)، والتي يسمح لغات غير الإنجليزية.

نصائح أخرى

يبدو أن الطباعة () في الدرس 43 ليس حتى مكان بالقرب من Unicode. جميع Nehe هي تقوم بإنشاء قوائم عرض 256 لأول شخصيات ASCII الأولى، وليس قبول سلسلة UTF8 وتحويله إلى UTF32 ل FreeType.

الترجمة. هذه في C ++ عملت بشكل جيد للغاية بالنسبة لي.

أيضا، الاستيلاء على نسخة من جنو Unifont. للتأكد من أن لديك الرساميات لجميع BMP..

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top