سؤال

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

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

أنا أستخدم Opentk 1.0 ، VB.NET (.NET 4)

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

المحلول

سيكون الاحتمال الواضح هو كتابة رؤوسك إلى ملف ، ثم إعادة تحميلها عند الحاجة. ما لم يكن لديك أسباب محددة للقيام بخلاف ذلك ، فمن الأفضل استخدام أحد تنسيقات الملفات الموجودة لهذا الغرض ، مثل واجهة الموجة OBJ, ، Ogre3d شبكة XML الملفات ، إلخ.

نصائح أخرى

هذا يبدو وكأنه موقف مثالي لقوائم عرض OpenGL. الطريقة التي تستخدمها هي أولاً أن تطلب من OpenGL معرف قائمة العرض لاستخدامه:

GLuint draw_id = glGenLists(1);

(يمكنك طلب العديد من المعرفات المتتالية في وقت واحد ، ولكن في هذه الحالة نطلب فقط 1) ثم ، من خلال روتين السحب الخاص بك ، اتصل بـ Glnewist:

glNewList(draw_id, GL_COMPILE);
<do compute intensive drawing here>
glEndList();

لاحظ أن هذا لن يجعل شكلك بالفعل (يمكنك استخدام GL_COMPILE_AND_EXECUTE في GLNEWLIST ، وهو إرادة جعل شكلك ، ولكن هذا هو الإحباط عموما)

الآن ، كلما احتجت إلى رسم كائنك:

< set up your OpenGL matrices >
glCallList(draw_id);

وأخيراً ، عندما تنتهي من ذلك ، يمكنك استخدام Gldeletelists.

يمكن أن تسرع قوائم العرض فعليًا ، حيث يمكن إجراء بعض التحسينات ، ويتم إزالة جميع النفقات العامة لمكالمات الوظائف.

الآن ، من الناحية الفنية ، تم إهمال قوائم عرض OpenGL (لم تتم إزالتها ، ومع ذلك!) في OpenGL 3.0 وما فوق (جنبا إلى جنب مع gltranslate ، glvertex glbegin ... grrr) ، ولكن لا يزال يتعين عليهم العمل في المستقبل المتوقع. لكي تكون دليلًا مستقبليًا ، يجب عليك استخدام صفائف Vertex ، لكن هذا أمر أكثر تعقيدًا.

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