تقاطع Ray-Box أثناء اجتياز المشهد مع تحويل المصفوفة

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

  •  23-09-2019
  •  | 
  •  

سؤال

هناك بعض الطرق التي أختبر بها تقاطعات صندوق الأشعة:

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

  2. باستخدام طريقة ComputeNstreesCene (...) دون استخدام تحولات المصفوفة على مشهد يحتوي على مجالاتين ، و dodecahedron (شبكة ثلاثية) ، وصناديق. يعبر ComputeInterSectionScene (...) بشكل متكرر جميع العقد من الرسم البياني للمشهد ويحسب أقرب تقاطع مع الشعاع المعطى. لا يطبق هذا الاختبار على وجه الخصوص أي تحولات قد تكون عليها العقد الوالدين والتي تحتاج أيضًا إلى تطبيقها على أطفالهم. مع هذا الاختبار ، أحصل أيضًا على التقاطعات الصحيحة.

  3. باستخدام طريقة ComputeInterScene (...) مع تحويلات المصفوفة. يعمل هذا الاختبار مثل الاختبار أعلاه باستثناء أنه قبل العثور على تقاطع بين الأشعة والعقدة في المشهد ، يتم تحويل الأشعة إلى إطار إحداثيات العقدة باستخدام عكس مصفوفة تحويل العقدة وبعد حساب التقاطع ، هذا التقاطع يتم تحويله إلى إحداثيات العالم من خلال تطبيق مصفوفة التحول على نقطة التقاطع.

عند الاختبار مع الطريقة الثالثة على ملف المشهد نفسه كما هو موضح في 2 ، فإن الاختبار باستخدام 4 أشعة (وبالتالي يتقاطع شعاع واحد المجال ، وشعرة واحدة المجال الآخر ، مربع واحد ، وصندوق واحد ، وصندوق آخر) ، فقط مربع آخر) تتداخل المجالين ولا يحصل المربعان على تقاطعات. عندما أقوم بتصحيح النظر في طريقة computeintersectionbox (...) ، فإنه يخبرني في الواقع أن الشعاع يتقاطع مع كل طائرة على الصندوق ولكن كل نقطة تقاطع لا تقع على الصندوق.

يبدو أن هذا سلوك غريب ، لأنه عند استخدام الاختبار 2 بدون تحولات ، أحصل على تقاطعات المربع الصحيحة (وبالتالي ، أعتقد أن تقاطع صندوق الشعاع الخاص بي صحيح) وعند استخدام الاختبار 3 مع التحولات ، أحصل على تقاطعات المجال الصحيحة ( وهكذا ، أعتقد أن شعاعتي المتحولة يجب أن تكون على ما يرام).

أي اقتراحات حيث يمكن أن أخطئ؟

شكرا لكم مقدما.

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

المحلول

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

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