سؤال

لدي بعض الأعمال الفنية البسيطة بصيغة SVG (نوع من الرموز والصور الرمزية) التي أرغب في عرضها في تطبيق OpenGL (يتم تطويره في C++ على Debian، باستخدام Qt).

الحل الواضح هو استخدام ImageMagick libs يتحول تقوم ملفات SVG بتوزيع الصور النقطية والملمس على بعض المضلعات المناسبة (أو استخدم فقط glDrawPixels القديم الجيد).

ومع ذلك، أتساءل عما إذا كان هناك أي شيء من شأنه ترجمة SVG مباشرةً إلى سلسلة من استدعاءات OpenGL وعرضها باستخدام خطوط ومضلعات OpenGL وما شابه.هل يعرف أحد أي شيء يمكن أن يفعل هذا؟

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

المحلول

وكيو تي يمكن أن تفعل هذا.
QSvgRenderer يمكن اتخاذ SVG ورسمه على QGLWidget على
لها ربما ستحتاج إلى عزف حولها مع أبيت paintEvent() إذا كنت ترغب في رسم أي شيء آخر على QGLWidget غير SVG.

نصائح أخرى

SVGL يبدو للتصدي لهذا ولكنها كانت نائمة لعدة سنوات. لا يزال قد تكون قادرة على العثور على بعض الرموز من القيمة هناك.

ويبدو إنكسكيب لديه بعض خيارات التصدير مثيرة للاهتمام قد تجدها مفيدة. وتشمل DXF، PovRay، EPS، PS (بوستسكريبت)، XAML، مطاط والمفتوحة الرسم (مكتب المدير العام). ربما هناك تحويل لواحد من تلك، والتي يمكن استخدامها إنكسكيب كوسيط.

وDXF على وجه الخصوص هو المرشح المحتمل لأنه هو شكل 3D المشتركة بالفعل. assimp هو مرشح جيد لDXF التحميل.

إجابتي تتعلق بعرض الرسومات المتجهة مع OpenGL بشكل عام، لأن جميع الحلول لهذه المشكلة يمكن أن تدعم بشكل تافه SVG على وجه الخصوص، على الرغم من أنه لا يوجد منها يدعم SVGs المتحركة (SMIL).نظرًا لعدم وجود أي شيء يُقال عن الرسوم المتحركة، أفترض أن السؤال يتضمن صور SVG الثابتة فقط.

منذ عام 2011، أحدث ما توصلت إليه التكنولوجيا هو طفل مارك كيلجارد، NV_path_rendering, ، وهو حاليًا مجرد امتداد بائع (Nvidia) كما قد تكون خمنت بالفعل من اسمه.هناك الكثير من المواد حول ذلك:

يمكنك بالطبع تحميل ملفات SVG وما شابه https://www.youtube.com/watch?v=bCrohG6PJQE.كما أنها تدعم بناء جملة PostScript للمسارات.يمكنك أيضًا مزج عرض المسار مع عناصر OpenGL (3D) الأخرى، كما هو موضح في:

يتم الآن استخدام NV_path_rendering بواسطة مكتبة Google Skia خلف الكواليس، عندما يكون ذلك متاحًا.(ساهمت Nvidia بالكود في أواخر عام 2013 و2014.) ويبدو أن أحد مطوري القاهرة (وهو أيضًا موظف في شركة Intel) قد أعجبه أيضًا http://lists.cairographics.org/archives/cairo/2013-March/024134.html, ، على الرغم من أنني لست [حتى الآن] على علم بأي جهود ملموسة تبذلها القاهرة لاستخدام NV_path_rendering.

إن الشركة الناشئة التي تتمتع بدعم بائع أقل (أو لا يوجد على الإطلاق) أو واجهة أكاديمية هي كذلك نانو في جي, ، والتي يتم تطويرها وصيانتها حاليًا.(https://github.com/memononen/nanovg) نظرًا لعدد المكتبات ثنائية الأبعاد عبر OpenGL التي ظهرت وانتهت بمرور الوقت، فإنك تراهن كثيرًا باستخدام شيء لا يدعمه أحد البائعين الرئيسيين، في رأيي المتواضع.

وأنا قدمت برنامج ناقلات الرسم دعا Omber أن لديه بعض القدرة على استيراد ملفات SVG، و يمكنها تصدير الرسوم ناقلات ل"المسطحة" 3D نموذج في شكل glTF 2.0. شكل glTF هو الى حد كبير بيانات برنامج OpenGL فقط الخام، حتى تتمكن من قراءتها في وعرضه مع الحد الأدنى من التعليمات البرمجية. كتبت قليلا Pixi.js المساعد للحصول على عرض ملفات glTF تحتوي على ناقلات الفن باستخدام تقنية WebGL.

لقد خلاط أيضا الدعم لاستيراد ملفات SVG. يمكنك ثم تصدير النتيجة إلى تنسيق ملف 3D، ولكن الدعم خلاط لSVG يقصد أكثر لاستيراد منحنيات بسيطة بدلا من رسومات معقدة.

وأنا متأكد من أن هناك غيرها من الأدوات التي يمكن أن تفعل مثل هذه الاشياء كذلك. قضية واحدة هي أن SVG يسبق أجهزة الرسومات الحديثة، لذلك الكثير من معالمه هي الألم الحقيقي لتنفيذ مع برنامج OpenGL، وخاصة بطريقة فعالة. أشياء مثل التعتيم على مجموعات، التدرجات من الأشكال غير النظامية، وعمليات التصفية على أساس خطوط المسح، وما يمكن الحصول على الفوضى، لذلك أنا لست متأكدا مما إذا معتمدة ملامح أكثر مقصور على فئة معينة من SVG عموما البرامج التي يمكن تحويل الأشياء إلى صيغ 3D.

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