واجهة برمجة التطبيقات للعرض ثلاثي الأبعاد من جانب الخادم [مغلق]

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

  •  09-06-2019
  •  | 
  •  

سؤال

أنا أعمل على تطبيق يحتاج إلى عرض مشاهد ثلاثية الأبعاد بسيطة على الخادم بسرعة، ثم إعادتها بتنسيق JPEG عبر HTTP.في الأساس، أريد أن أكون قادرًا على تضمين مشهد ديناميكي ثلاثي الأبعاد في صفحة HTML، عن طريق القيام بشيء مثل:

<img src="http://www.myserver.com/renderimage?scene=1&x=123&y=123&z=123">

سؤالي هو حول ما هي التقنيات التي يجب استخدامها للقيام بالعرض.في تطبيق سطح المكتب، من الطبيعي أن أستخدم DirectX، لكنني أخشى أنه قد لا يكون مثاليًا لتطبيق من جانب الخادم والذي من شأنه إنشاء صور لعشرات أو حتى مئات المستخدمين جنبًا إلى جنب.أيمتلك أى أحد خبرة فى هذا؟هل هناك واجهة برمجة تطبيقات ثلاثية الأبعاد (يفضل أن تكون متاحة مجانًا) ستكون مثالية لهذا التطبيق؟هل من الأفضل أن تكتب عارض برامج من الصفر؟

اهتماماتي الرئيسية بشأن استخدام DirectX أو OpenGL هي ما إذا كان سيعمل بشكل جيد في بيئة خادم افتراضية، وما إذا كان ذلك منطقيًا مع أجهزة الخادم النموذجية (التي لا أتحكم فيها كثيرًا).

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

المحلول

تم تصميم RealityServer بواسطة الصور الذهنية للقيام بالضبط بما هو موضح هنا.تتوفر المزيد من التفاصيل على صفحة المنتج (بما في ذلك إصدار المطور القابل للتنزيل).

مستندات RealityServer

نصائح أخرى

أقول إن أفضل رهان لك هو تشغيل تطبيق Direct3D/OpenGL على الخادم (بدون توقف).ثم جعل صفحة الخادم ترسل طلبًا إلى تطبيق العرض، واطلب من تطبيق العرض إرسال jpg/png/أي شيء مرة أخرى.

  • إذا كان Direct3D/OpenGL بطيئًا في عرض المشهد في الأجهزة، فسيكون أي حل برمجي أسوأ
  • من خلال الاستمرار في تشغيل تطبيق العرض، فإنك تتجنب الحمل الزائد لإنشاء/تدمير الأنسجة، والمخازن المؤقتة الخلفية، والمخازن المؤقتة الرأسية، وما إلى ذلك.يمكنك عرض مشهد بسيط 100 مرة في الثانية.

لكن العديد من الخوادم لا تحتوي على بطاقات رسومات.يعد Direct3D عديم الفائدة إلى حد كبير في البرامج (يوجد جهاز تمت محاكاته من Ms، ولكنه جيد فقط لاختبار التأثيرات)، ولم يجرب OpenGL في البرنامج مطلقًا.

يمكنك تغليف Pov-ray (هنا باستخدام POSIX وإصدار Windows).مثال PHP:

<?php
chdir("/tmp");
@unlink("demo.png");
system("~janus/.wine/drive_c/POV-Ray-v3.7-RC6/bin/pvengine-sse2.exe /render demo.pov /exit");
header("Content-type: image/png");
fpassthru($f = fopen("demo.png","r"));
fclose($f);
?>

demo.pov متاح هنا.

يمكنك استخدام لغة نموذجية مثل Jinja2 لإدراج إحداثيات الكاميرا الخاصة بك.

ليس واجهة برمجة التطبيقات (API) بقدر ما هو عارض؛ بوفراي؟ويبدو أن هناك أيضًا أ http واجهه المستخدم...

يمكنك أيضًا إلقاء نظرة على Java3D (https://java3d.dev.java.net/)، والذي سيكون حلاً رائعًا إذا كانت بنية الخادم لديك تعتمد على Java بالفعل.

أوصي أيضًا بمحاولة الابتعاد عن حل العرض الخاص بالبرنامج فقط إذا استطعت - فمحاولة مناقشة مجموعة كبيرة من عمليات الخادم التي تتطلب جميعها متطلبات متزامنة على أجهزة العرض ثلاثي الأبعاد تبدو وكأنها تتطلب الكثير من العمل.

يافاراي (http://www.yafaray.org/) قد يكون خيارًا أوليًا جيدًا يجب مراعاته عند العرض العام ثلاثي الأبعاد.إنه سريع بشكل معقول والنتائج تبدو رائعة.ويمكن استخدامه ضمن برامج أخرى، على سبيل المثال.مصمم نماذج Blender 3D.الترخيص هو LPGL.

إذا كان البرنامج من جانب الخادم مكتوبًا بلغة Python، وكان المشهد ثلاثي الأبعاد المطلوب عبارة عن تصور للبيانات العلمية، فابحث في MayaVi2 http://mayavi.sourceforge.net/, ، أو إذا لم يكن الأمر كذلك، فانتقل للتصفح في http://www.vrplumber.com/py3d.py

يجب على أولئك الذين يقترحون POV-Ray المشهور على نطاق واسع أن يدركوا أنها ليست مكتبة أو أي نوع من الكيانات التي تقدم واجهة برمجة التطبيقات (API).ستحتاج العملية من جانب الخادم إلى كتابة ملف مشهد نصي، وتنفيذ عملية جديدة لتشغيل POV-Ray بالخيارات الصحيحة، والتقاط ملف الصورة الناتج.إذا كان من السهل إعداد ذلك لتطبيق معين، وإذا كانت لديك خبرة أكبر في استخدام POV-Ray مقارنةً بالعارضين الآخرين، فحسنًا افعل ذلك!

يكون العرض من جانب الخادم منطقيًا فقط إذا كان المشهد يتكون من عدد كبير من الكائنات، بحيث يكون تنزيل مجموعة البيانات إلى العميل لعرض العميل بطيئًا للغاية ولا يُتوقع أن يتم العرض في الوقت الفعلي.لا يعد العرض من جانب العميل أمرًا صعبًا للغاية إذا كنت تستخدم شيئًا مثل com.joogl إلى جانب تنزيل المشهد التقدمي (أي.قم بتنزيل الكائنات الأمامية وعرضها، ثم قم بتنزيل الكائنات بشكل تدريجي بناءً على المسافة من نقطة العرض وإعادة العرض).

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

الدفع wgpu.net.

أعتقد أنه مفيد جدًا.

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