Yocto/GL عبارة عن مجموعة من مكتبات C++ 17 الصغيرة لبناء خوارزميات رسومية مادية تم إصدارها بموجب ترخيص MIT. تمت كتابة Yocto/GL بأسلوب موجه نحو البيانات بشكل متعمد لسهولة التطوير والاستخدام. يتم تقسيم Yocto/GL إلى مكتبات صغيرة لتسهيل التنقل في التعليمات البرمجية. راجع كل ملف رأس للحصول على الوثائق.
yocto/yocto_math.{h}
: ناقلات ذات حجم ثابت، مصفوفات، إطارات صلبة، تحويلاتyocto/yocto_color.{h}
: تحويل الألوان، تعديل الألوان، وظائف تعيين النغمات، درجات الألوان، خرائط الألوان، مساحات الألوانyocto/yocto_geometry.{h}
: الأشعة، المربعات المحيطة، الدوال الهندسية، تقاطع الشعاع البدائي، التداخل البدائي النقطيyocto/yocto_noise.{h}
: ضوضاء بيرلينyocto/yocto_sampling.{h}
: توليد أرقام عشوائية، توليد النقاط والاتجاهات، أدوات مونتي كارلوyocto/yocto_shading.{h}
: تقييم وأخذ عينات من وظائف فريسنل، وفصوص bsdf، وفصوص النفاذية، ووظائف الطورyocto/yocto_image.{h,cpp}
: نوع بيانات الصورة البسيط، تغيير حجم الصورة، تعيين النغمات، تصحيح الألوان، الصور الإجرائية، الشمس والسماء الإجرائيةyocto/yocto_shape.{h,cpp}
: بنية بيانات الشكل البسيط، أدوات مساعدة لمعالجة الشبكات المثلثة، الشبكات الرباعية ومجموعات الخطوط، حساب القيم الطبيعية والظلال، التقسيم الفرعي الخطي وCatmull-Clark، توليد الأشكال الإجرائية، تقاطع الأشعة واستعلامات النقطة الأقربyocto/yocto_scene.{h,cpp}
: تمثيل المشهد وتقييم الخصائصyocto/yocto_bvh.{h,cpp}
: تقاطع الشعاع واستعلامات النقطة الأقرب للشبكات المثلثية والشبكات الرباعية ومجموعات الخطوط ومشاهد المثيلات باستخدام تسلسل هرمي لحجم محيط ذي مستويينyocto/yocto_trace.{h,cpp}
: تتبع مسار الأسطح والشعر الذي يدعم إضاءة المنطقة والبيئة، وmicrofacet GGX والتشتت تحت السطح، وأخذ عينات متعددة الأهميةyocto/yocto_sceneio.{h,cpp}
: تسلسل الصورة والشكل والمشهدyocto/yocto_modelio.{h,cpp}
: التحليل والكتابة على مستوى منخفض لتنسيقات Ply وObj وStlyocto/yocto_pbrtio.{h,cpp}
: التحليل والكتابة على مستوى منخفض لتنسيق Pbrtyocto/yocto_cli.{h}
: أدوات الطباعة وتحليل سطر الأوامرyocto/yocto_parallel.h
: أدوات مساعدة للتزامن (مهملة)يمكنك رؤية Yocto/GL أثناء العمل في التطبيقات التالية المكتوبة لاختبار المكتبة:
apps/ytonemap.cpp
: تحويل الصور وعرضهاapps/ycolorgrade.cpp
: تدرج ألوان الصورةapps/yconvert.cpp
: تحويل المشهدapps/yconverts.cpp
: تحويل الشكلapps/ytrace.cpp
: عرض المشهد التفاعلي وغير المتصل بالإنترنتapps/ycutrace.cpp
: عرض المشهد التفاعلي وغير المتصل بالإنترنت باستخدام CUDAapps/yview.cpp
: عرض المشهد التفاعليفيما يلي بعض الصور الاختبارية المقدمة باستخدام أداة تتبع المسار. يتم تضمين المزيد من الصور في موقع المشروع.
يتبع Yocto/GL "نموذج البرمجة الموجهة نحو البيانات" الذي يجعل البيانات واضحة. يتم تخزين البيانات في بنيات بسيطة ويمكن الوصول إليها بوظائف مجانية أو مباشرة. جميع البيانات متاحة للعامة، لذلك لا نقوم بأي محاولة لتغليفها. نحن نفعل ذلك لأن هذا يجعل توسيع Yocto/GL أسهل وأسرع في التعلم، مع تدفق بيانات أكثر وضوحًا يكون أسهل عند كتابة تعليمات برمجية متوازية. نظرًا لأن Yocto/GL يستخدم بشكل أساسي للبحث والتدريس، فإن البيانات الصريحة تكون أكثر قابلية للاختراق وأسهل للفهم.
تقريبًا جميع الكائنات في Yocto/GL لها قيمة دلالية. هذا يعني أنه يمكن نسخ كل شيء وتسلسله بشكل تافه وليس هناك حاجة لإدارة الذاكرة. على الرغم من أن هذا له عيب احتمال تقديم نسخ زائفة، إلا أنه يتمتع بميزة ضمان عدم حدوث أي تلف في الذاكرة، وهو ما تبين أنه كان مشكلة كبيرة لمستخدمي C++ المبتدئين، حتى في مكتبة صغيرة جدًا مثل هذه.
فيما يتعلق بأسلوب التعليمات البرمجية، فإننا نفضل النهج الوظيفي بدلاً من النهج الكائني، ونفضل الوظائف الحرة على أساليب الفصل. يتم تعريف جميع الوظائف والبيانات في مساحة الاسم yocto
حتى تتمكن المكتبات من الاتصال ببعضها البعض بشكل تافه.
كان استخدام القوالب في Yocto هو السبب وراء العديد من عمليات إعادة الهيكلة، بدءًا من عدم وجود قالب إلى الاستخدام المكثف للقالب. في هذه المرحلة، يستخدم Yocto بعض القوالب لسهولة القراءة. في المستقبل، سنزيد من استخدام القوالب في كود الرياضيات، مع الحفاظ على كتابة العديد من واجهات برمجة التطبيقات بشكل واضح.
لمعالجة الأخطاء في عملية الإدخال/الإخراج، إما أن نعيد كائن الحالة أو واجهة تستخدم علامات منطقية وسلاسل خطأ. يتم استخدام الاستثناءات داخليًا عند استخدامها بواسطة مكتبات خارجية، ولكن بخلاف ذلك لا يتم استخدام أي استثناء. في الوقت الحالي، تُستخدم الاستثناءات فقط للإبلاغ عن "أخطاء المبرمج"، أي عند انتهاك الشروط المسبقة أو الشروط اللاحقة في الوظائف، كما تفعل المكتبة القياسية.
تم إصدار المكتبة بموجب ترخيص MIT. نقوم بتضمين تبعيات خارجية مختلفة في التوزيع، بحيث يكون لكل منها ترخيص خاص به، متوافق مع الترخيص المختار.
تتطلب هذه المكتبة مترجم C++ 17 ومن المعروف أنه يمكن تجميعها على OsX (Xcode >= 11) وWindows (MSVC >= 2019) وLinux (gcc >= 9, clang >= 9).
يمكنك إنشاء أمثلة للتطبيقات باستخدام CMake مع mkdir build; cd build; cmake ..; cmake --build .
يتم تضمين التبعيات المطلوبة لـ Yocto/GL في التوزيع ولا يلزم تثبيتها بشكل منفصل.
يدعم Yocto/GL بشكل اختياري إنشاء عروض OpenGL التجريبية. يتم تمكين دعم OpenGL من خلال تحديد خيار cmake YOCTO_OPENGL
. يتم تضمين تبعيات OpenGL في هذا الريبو.
يدعم Yocto/GL اختياريًا استخدام Intel's Embree لصب الأشعة. راجع ملف CMake الرئيسي لمعرفة كيفية الارتباط به. يتم تمكين دعم Embree من خلال تحديد خيار cmake YOCTO_EMBREE
. يجب تثبيت Embree بشكل منفصل.
يدعم Yocto/GL اختياريًا استخدام تقنية Open Image Denoise من Intel لتقليل الضوضاء. راجع ملف CMake الرئيسي لمعرفة كيفية الارتباط به. يتم تمكين دعم Open Image Denoise من خلال تحديد خيار cmake YOCTO_DENOISE
. يجب تثبيت OIDN بشكل منفصل.