سؤال

أنا استخدم

worldview_inverse * (projection_inverse * vector)

لتحويل إحداثيات مساحة الشاشة إلى إحداثيات الفضاء العالمي. افترضت أن

(x,y,1,1)

سوف تحول إلى نقطة على متن الطائرة البعيدة، في حين

(x,y,-1,1)

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

أعتقد أن هذا له علاقة مع مكونات W 1 أطعم في الإسقاط العكسي، لأنه عادة ما يكون 1 قبل الإسقاط، وليس بعد، وأنا أفعل الإسقاط العكسي. ما الخطأ الذي افعله؟

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

المحلول

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

near_point = view_position
           + (far_point - view_position) * (near_distance / far_distance)

كما لك مشكلة حقيقية. أولا، لا تنس أن تقسم ثي! أيضا، اعتمادا على مصفوفة الإسقاط الخاصة بك، هل حاولت (X، Y، 0،1) بدلا من z = -1.

near_point = worldview_inverse * (projection_inverse * vector)
near_point /= near_point.W
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top