سؤال

أنا أستخدم Gluunproject لإلقاء شعاع في المشهد وإضافة بدائية هناك. ما أحاول القيام به الآن هو اختيار بدقة بدائية ، لذلك إذا كان لدي 3 مجالات ، يمكنني النقر على واحدة لحذفها.

أعتقد أن الحل سيتحقق بطريقة ما إذا كان الشعاع تقاطع مع كائن وتحقق مما إذا كان الأقرب إلى أصل الصب. إن حلي حتى الآن هو بدائي ويحيط بجميع الكائنات مع مكعب محبط ، هل هناك على أي حال للقيام بذلك بدقة لقول المجالات التي تستخدم:

does the ray intersect with ( object)

أو

returnRayIntersections(ray);

آخر شيء ، أنا أستخدم OpenGL مع GLUT.

شكرا للجميع ، لورانس

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

المحلول

هناك طريقة أخرى جيدة لتنفيذ الانتقاء في OpenGL مثل هذا:

ارسم المشهد الخاص بك في المخزن المؤقت الخلفي ، باستخدام لون فريد لكل بدائي تريد تحديده. إذا كنت تستخدم وضع 24 بت ، يمكن أن تكون الألوان ببساطة #000001 و #000002 وما إلى ذلك. قم بإيقاف تشغيل الإضاءة ، والضباب وما إلى ذلك ، بحيث تكون الألوان التي تحددها هي الألوان الدقيقة التي ستستغرقها وحدات البكسل.

لا تقم بزيارة الفوقي الخلفي على الشاشة (لا تستخدم glswapbuffers). بدلاً من ذلك ، استخدم GlreadPixels لقراءة GL الخلفية في المخزن المؤقت للذاكرة. بعد ذلك ، لديك صورة نقطية للذاكرة يمكنك قراءة قيمة بكسل ، والتي تتوافق مع موقع الماوس على الشاشة. يمكن تعيين قيمة اللون التي تقرأها من هذا بسهولة إلى البدائية (لأنها ستكون #000001 و #000002 وما إلى ذلك).

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

نصائح أخرى

باستخدام OpenGL وضع اختيار هي أفضل طريقة للقيام بذلك ، لأنه يمكنه التعامل مع العرض المعقد بشكل تعسفي ، وليس فقط المجالات. يمكنك رؤية العديد من البرامج التعليمية لهذا ، ولكن تقريبًا: تبدأ بإعداد GL في وضع التحديد:

glRenderMode (GL_SELECT);

ثم ترسم المشهد ، بعد إعداد ملف اختيار المخزن المؤقت التي تجسد أسماء الشظايا التي تقدمها. هذه مقالة - سلعة سوف تبدأ.

نيه درس تعليمي طويل ، ولكن جيد جدا جدا.

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