البرمجة

تحكم في عدة كاميرات باستخدام نفس التحكم

Title: التحكم في عدة كاميرات باستخدام نفس التحكم

Body: لديّ مشهدان مختلفان في Three.js ولكل منهما كاميرا خاصة به. يمكنني التحكم في كل كاميرا بشكل فردي باستخدام مثيل مراقبة الحركة (TrackballControls) المقابل.

هل هناك طريقة موثوقة لـ “قفل” أو “ربط” هذه التحكمات معًا، بحيث يتسبب تلاعب واحد في إعادة تموضع الكاميرا نفسها في الآخر؟ الطريقة التي أستخدمها حاليًا هي إضافة مستمعين للتغيير (change) إلى التحكمات وتحديث كلتا الكاميرات لتغيير أي منهما، ولكن هذا ليس بالشكل الأنسب لأن كلا التحكمين يمكن أن يتغير في نفس الوقت (نظرًا للتقليل من الاهتزاز).

المزيد من المعلومات

لتحقيق ذلك، يمكنك استخدام نهجٍ يعتمد على إضافة مستمع لحدث تغيير الكاميرا في كل من مستمعي التحكم (controls)، ثم تحديث الكاميرا الأخرى بناءً على التغيير الذي يحدث في الكاميرا الأولى. يمكنك استخدام تقنية Event-Driven Programming لتحقيق هذا الهدف.

في البداية، يجب أن تكون لديك متغيرات تمثل الكاميرات ومستمعي التحكم لكل منها، مثل:

javascript
var camera1, camera2; var controls1, controls2;

ثم، يمكنك إنشاء مستمع لحدث تغيير الكاميرا لكل من مستمعي التحكم، وداخل كل مستمع، قم بتحديث الكاميرا الأخرى بناءً على تغيير الكاميرا الحالية. على سبيل المثال:

javascript
controls1.addEventListener( 'change', function () { camera2.position.copy( camera1.position ); camera2.quaternion.copy( camera1.quaternion ); camera2.updateProjectionMatrix(); } ); controls2.addEventListener( 'change', function () { camera1.position.copy( camera2.position ); camera1.quaternion.copy( camera2.quaternion ); camera1.updateProjectionMatrix(); } );

هذا الكود يقوم بتحديث موضع ودوران الكاميرا الأخرى عندما يحدث تغيير في الكاميرا الحالية، مما يؤدي إلى تزامن تمامًا بين تحريك الكاميرات في الاثنين.

زر الذهاب إلى الأعلى