سؤال

لقد وجدت مكتبة تسمى pyeuclid و يبدو أنه يفعل ما أريد فيما يتعلق بالرياضيات ثلاثية الأبعاد. يتنافس على فئة ناقلات ثلاثية الأبعاد وفئة مصفوفة 4x4 قادرة على التحولات مثل الدوران والترجمة والحجم.

مصفوفة الخلق بسيط ، ببساطة تمرير على طول الحجج ويتم إنشاء المصفوفة.

>>> m = Matrix4()
>>> m.translate(50,50,50)
Matrix4([    1.00     0.00     0.00    50.00
             0.00     1.00     0.00    50.00
             0.00     0.00     1.00    50.00
             0.00     0.00     0.00     1.00])

يأتي Lbrary مع فئة متجه ثلاثي الأبعاد ، إذا أردت ترجمة نقطة ثلاثية الأبعاد مع هذه المصفوفة ، فسأحتاج أولاً إلى إنشاء ملف فئة المتجهات, ، مثله.

>>> v = Vector3(100,200,300)
>>> v
Vector3(100.00, 200.00, 300.00)
>>> v.x
100
>>> v.y
200
>>> v.z
300

الآن تأتي فئة Matrix4 () مع طريقة لتحويل الإحداثيات ، وتستخدم مثل ذلك.

>>> m.transform(v)
Point3(150.00, 250.00, 350.00)

هذا رائع ، ومع ذلك ، لا يوجد أي إسقاط منظور يتم تطبيقه ، تأتي المكتبة مع طريقة تسمى Matrix4.New_perseptive (Fov_Y ، الجانب ، بالقرب ، بعيدًا). هذا هو المكان الذي تكمن فيه المشكلة ، ليس لدي أي فكرة عن كيفية استخدام هذه الوظيفة بشكل صحيح ، (M.Transform (Vector3) يؤدي إلى إنتاج أي شيء قابل للاستخدام) توثيق تُظهر Doent كيف يتم استخدامها مع المتجهات أو المصفوفات الأخرى ، وهي تقول شيئًا عن كونه "يعادل مكالمة OpenGL Gluperseptive.fov_y" ، لكن لم تستخدم OpenGL أبدًا حتى لا يساعد ذلك.

هذه هي الوحدة النمطية (من Euclid Imorth Vector3 ، Matrix4)

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

لذا احصل على هناك ومساعدة Noob في محنة! :-) شكرا لك على مساعدتك.

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

المحلول

هذا البرنامج التعليمي يشرح الحجج إلى اللمعان (), ، ويجب أن تنتقل منذ أن كتبت مكتبتك مع ذلك كنموذج.

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

نصائح أخرى

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

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

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

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