سؤال

مرحبًا يا شباب ، أنا أعمل مع WPF 3D ، أكتب حاليًا برنامجًا يقوم بإنشاء بلاط ثلاثي الأبعاد عبر الشاشة من اليسار إلى اليمين ، لكنني بحاجة إلى معرفة ما هي حدودي على X ، y IE (-x-0) (0--0- x+) لذلك أعرف متى أبدأ صفًا آخر من البلاط. تحاول أفكاري الأولية معرفة خوارزمية معقدة للانتقال من وحدات البكسل إلى إحداثيات الشاشة ، ولكن يبدو أنه يجب أن تكون هناك طريقة أسهل.

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

المحلول

إذا فهمت لك بشكل صحيح ، فأنت تريد معرفة نطاق الإحداثيات ثلاثية الأبعاد المرئية من خلال Viewport3DvvaUal.

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

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

بمجرد تحديد مسافة ، إليك كيفية تعيين منفذ العرض الخاص بك إلى نقاط ثلاثية الأبعاد على متن طائرة معينة دون إجراء جميع الحسابات بنفسك:

  1. قم بإنشاء طراز في Viewport3Dvisual منفصل ، باستخدام نفس إعدادات الكاميرا ولكن مع نموذج يتكون فقط من مستطيل كبير واحد على المسافة المطلوبة.
  2. استخدم اختبار HIT لاختبار كل ركن من أركان Viewport ، وحصل على رد اتصال نتيجة اختبار ضرب.
  3. استخراج الإحداثيات على المستطيل من نتيجة اختبار ضرب واستخدامها لحساباتك.

تتمتع هذه التقنية بميزة العمل بشكل موثوق أينما تواجه الكاميرا ، وحتى تعمل مع الكاميرات المتحركة وما شابه.

ملاحظة: إذا أسيء فهم السؤال ، وكنت تسأل فقط عن وضع صفوف من البلاط في ثنائية الأبعاد ستحتوي على محتوى ثلاثي الأبعاد ، فيمكنك الحصول على التأثير الذي تصفه بمجرد استخدام wrappanel. إذا كنت ترغب في ربط البيانات ، فاستخدم عناصر Control أو ListBox مع itempaneltemplate من wrappanel.

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