كيفية العثور على العادي ناقلات لافتا مباشرة من العالم الافتراضي إلى الشاشة في Java3D?
سؤال
أعتقد أنه يمكن القيام به من خلال تطبيق مصفوفة التحويل من scenegraph إلى z-عادي (0, 0, 1), لكنه لا يعمل.قانون بلدي وغني عن مثل هذا:
Vector3f toScreenVector = new Vector3f(0, 0, 1);
Transform3D t3d = new Transform3D();
tg.getTransform(t3d); //tg is Transform Group of all objects in a scene
t3d.transform(toScreenVector);
ثم حاولت شيئا من هذا القبيل أيضا:
Point3d eyePos = new Point3d();
Point3d mousePos = new Point3d();
canvas.getCenterEyeInImagePlate(eyePos);
canvas.getPixelLocationInImagePlate(new Point2d(Main.WIDTH/2, Main.HEIGHT/2), mousePos); //Main is the class for main window.
Transform3D motion = new Transform3D();
canvas.getImagePlateToVworld(motion);
motion.transform(eyePos);
motion.transform(mousePos);
Vector3d toScreenVector = new Vector3f(eyePos);
toScreenVector.sub(mousePos);
toScreenVector.normalize();
ولكن لا يزال لا يعمل بشكل صحيح.أعتقد يجب أن يكون هناك طريقة سهلة لإنشاء مثل هذه النواقل.هل تعرف ما هو الخطأ في بلدي رمز أو أفضل طريقة للقيام بذلك ؟
المحلول 2
نعم, كنت حصلت على السؤال.آسف أن كنت مشوشة قليلا أمس.الآن لدي تصحيح التعليمات البرمجية التالية اقتراحك و خلط اثنين من قطعة من التعليمات البرمجية في مسألة معا:
Vector3f toScreenVector = new Vector3f(0, 0, 1);
Transform3D t3d = new Transform3D();
canvas.getImagePlateToVworld(t3d);
t3d.transform(toScreenVector);
tg.getTransform(t3d); //tg is Transform Group of all objects in a scene
t3d.transform(toScreenVector);
شكرا لك.
نصائح أخرى
إذا كنت تحصل على هذا الحق ، تريد ناقل العادية إلى شاشة الطائرة ، ولكن في العالم الإحداثيات ؟
في حال كنت ترغب في INVERT
التحول من World -> Screen and do Screen -> World
من (0,0,-1)
أو (0,0,1)
اعتمادا على أي محور الشاشة نقاط.
منذ ModelView المصفوفة هو مجرد دوران مصفوفة (تجاهل متجانسة تحويل جزء) ، يمكنك ببساطة سحب هذا الخروج من خلال اتخاذ تبديل الدوران جزئي أو بسيط في القراءة في الصف السفلي - كما ينقل على Z
تنسيق العمود تحت تبديل.