هذا هو دليل على تقديم النص مباشرة على وحدة معالجة الرسومات باستخدام الخطوط العريضة المحددة بواسطة الخط.
يتم تحويل ملامح الرسول الرسومية إلى قائمة بمنحنيات بيزيير التربيعية الفردية (المحددة بواسطة نقاط التحكم الخاصة بهم) ، والتي يتم تحميلها على وحدة معالجة الرسومات.
يتم إنشاء رباعي لكل غليف ويحدد تظليل البكسل ما إذا كان كل بكسل داخل أو خارج الرسول الرمزية. للقيام بذلك ، يتم حساب العدد المتعرج للبكسل عن طريق تقاطع شعاع مع منحنيات بيزييه. في كل تقاطع ، يدخل الأشعة أو يخرج من المنطقة المملوءة كما هو محدد من خلال اتجاه منحنى بيزير بالنسبة إلى الشعاع. في كل مخرج ، يتم زيادة عدد التعويذة بمقدار واحد وفي كل إدخال يتم انخفاض عدد اللفح. بعد النظر في جميع التقاطعات ، سيكون عدد المتعرج غير صفري إذا كان البيكسل داخل المخطط التفصيلي.
لا يهم اتجاه الأشعة هذا حساب أرقام اللف ، ولكن يمكن تبسيط الرياضيات بشكل كبير باستخدام أشعة موازية للمحور السيني. من خلال طرح موضع العينة من نقاط التحكم في منحنيات بيزير ، يتم تحويل نظام الإحداثيات بحيث يكون أصل الشعاع في
للعثور على التقاطعات بين شعاع ومنحنى بيزير واحد ، تذكر أن منحنى بيزير التربيعي يوصف بواسطة الصيغة التالية (للخلفية على منحنيات بيزيير انظر الجمال والتمهيدي):
أخذ المكون Y فقط وتطبيق الحالة
التي يمكن إعادة ترتيبها إلى:
بحيث يمكن حلها باستخدام الصيغة التربيعية:
استبدال
قد يكون للمعادلة التربيعية صفر أو حل واحد أو حللين. علاوة على ذلك ، حل
في هذه المرحلة ، تم تحديد التقاطعات بين منحنى Ray و Bezier ، لكنها لا تزال بحاجة إلى تصنيفها على أنها الدخول أو الخروج. يحسب العرض التوضيحي الذي توفره Dobbie بشكل صريح مشتق منحنى Bezier لكل منهما
لذلك ، يعبر منحنى Bezier المحور السيني في اتجاه ثابت في كل حل ، بالإضافة إلى اتفاقية اتجاه الكفاف ،
هناك نهج مختلف لفهم هذه العلاقة هو ملاحظة أنه بسبب العلامات المختلفة المستخدمة في الحلول والجذر التربيعي غير سلبي ،
إذا كانت المعلمة
يتم تنفيذ مكافحة التقييم على طول اتجاه الشعاع من خلال النظر في نافذة بحجم بكسل حول أصل الشعاع. إذا وقع التقاطع في هذه النافذة ، فسيتم تغيير رقم اللف فقط لحساب تغطية البكسل. يتم تحديد الوزن الكسري بالمسافة من الحافة اليسرى للبكسل (وهذا يتسق مع الأشعة التي تشير إلى اليمين). من خلال النظر في الأقسام الفردية ، يمكن للمرء أن يرى أن هذا يحسب التغطية أحادية البعد بالضبط.
لاحظ أنه يتعين علينا أيضًا التفكير في التقاطعات خلف أصل الشعاع الآن ، لكن التنفيذ يحسب أولاً أي تقاطع مع المحور السيني ثم يتحقق من الموضع X ، لذلك لا يتغير كثيرًا. طريقة مختلفة للتفكير في ذلك هي أن الحالة
من أجل مكافحة التغذية الكاملة ، يمكننا استخدام أشعة متعددة على طول اتجاهات مختلفة (على سبيل المثال على طول المحور السيني وواحد على طول المحور ص).
يخضع هذا النوع من التقنيات للفنون من الدقة العددية المحدودة لأرقام النقاط العائمة. تعرض الصورة أدناه مثيلًا لهذه القطع الأثرية عند تكبيرها بالكامل (ومعرفة مكان البحث). ومع ذلك ، فقد وجدت أن هذا التنفيذ مستقر عدديًا بالفعل. يمكن القضاء على أي قطعة أثرية متبقية باستخدام خوارزمية سبيكة ، والتي لم يتم تنفيذها هنا بسبب براءة الاختراع المرتبطة بها.
لا يقوم هذا العرض التوضيحي أيضًا بتنفيذ أي تحسينات في الأداء (مثل النطاق) وقد يكون له استخدام عالي في GPU في بعض السيناريوهات وعند استخدام خطوط معقدة للغاية.

استنساخ المشروع بشكل متكرر لتهيئة العوامل الفرعية للاعتمادات (أو تشغيل git submodule update --init إذا كنت قد استنسخت بالفعل الريبو):
git clone --recursive https://github.com/GreenLightning/gpu-font-rendering.git
cd gpu-font-rendering
# Note: CMake will create the build directory.
cmake -S . -B build
make -j8 --directory build
على Windows ، قد ترغب في استخدام Cmake GUI و/أو Visual Studio بدلاً من ذلك.
على Linux ، قد تضطر إلى تثبيت حزم إضافية لتطوير OpenGL (مثل sudo apt-get install xorg-dev libgl1-mesa-dev لـ Ubuntu).
./build/main
يتطلب البرنامج أن تكون أدلة fonts shaders في الدليل الحالي لتحميل موارده. إذا حصلت على نافذة سوداء فقط ، فهذا على الأرجح المشكلة. تحقق من دليل العمل الخاص بك وتحقق من وحدة التحكم للحصول على أخطاء.
تم اختباره على نظام التشغيل Windows 10 و Macos Monterey و Ubuntu 22.04.