Three.js: قم بتدوير مكعب حول حافته.

تم إنشاؤها على ٥ فبراير ٢٠١٢  ·  5تعليقات  ·  مصدر: mrdoob/three.js

أهلا بالجميع!

كنت أسأل بالفعل عن التدوير حول محور تعسفي وحصلت على إجابات واضحة منشورة في # 1219 و # 1220.

لكن لا يزال من غير الواضح كيفية تدوير المكعب حول إحدى حوافه (هل يمكن لأي شخص مشاركة مثل هذا الرمز إذا كان موجودًا).

تم نشر وظيفتين في # 1219:

function rotateAroundObjectAxis( object, axis, radians ) { .. }

و

function rotateAroundWorldAxis( object, axis, radians ) { .. }

إنها تسمح لي بتدوير مكعب حول محور عشوائي يمر عبر مركز الصندوق المحيط به.

ما أحتاجه هو تدوير كائن حول محور عشوائي والذي لا يمر بالضرورة عبر مركز الكائن.

كيف تفعل ذلك بشكل صحيح؟

عذرًا ، إذا كنت مزعجًا بعض الشيء بشأن ذلك ولكني أرغب في تنفيذ مثل هذه الوظيفة.

شكرا.

ملاحظة: يبدو أنني بحاجة إلى وظيفة تشبه:

function rotateAroundArbitraryAxis (object، axisDirection، axisBasePoint، راديان) {..}

بواسطة محور بيسبوينت أعني النقطة التي يمر بها المحور المحدد.

قرأت على الإنترنت أن مثل هذا التناوب يجب أن يتم في عدة خطوات:

  1. ترجمة الفضاء بحيث يمر محور الدوران من خلال الأصل.
  2. قم بتدوير المساحة حول المحور Z بحيث يقع محور الدوران في مستوى XZ.
  3. قم بتدوير المساحة حول المحور Y بحيث يقع محور الدوران على طول المحور Z.
  4. إجراء الدوران المطلوب بواسطة Theta حول المحور z.
  5. قم بتطبيق معكوس الخطوة (3).
  6. قم بتطبيق معكوس الخطوة (2).
  7. قم بتطبيق معكوس الخطوة (1).

هل أفهمها بشكل صحيح؟

كيف يتم إجراء مثل هذه العملية باستخدام Three.js؟

حاولت مضاعفة المصفوفات المختلفة (ترجمة / تناوب) مع بعضها البعض في ثلاثة .js ولكن لم أحصل على النتيجة المرجوة :-(

تشكرات.

Question

التعليق الأكثر فائدة

ماذا عن شيء كهذا؟

var dummy = new THREE.Object3D();
dummy.position.x = 50;
dummy.position.z = 50;
scene.add( dummy );

var cube = new THREE.Mesh( new THREE.CubeGeometry( 100, 100, 100 ), new THREE.MeshBasicMaterial() );
cube.position.x = - 50;
cube.position.z = - 50;
dummy.add( cube );

ال 5 كومينتر

ماذا عن شيء كهذا؟

var dummy = new THREE.Object3D();
dummy.position.x = 50;
dummy.position.z = 50;
scene.add( dummy );

var cube = new THREE.Mesh( new THREE.CubeGeometry( 100, 100, 100 ), new THREE.MeshBasicMaterial() );
cube.position.x = - 50;
cube.position.z = - 50;
dummy.add( cube );

شكرا على الرد.

لسوء الحظ ، لا يزال المكعب في مثالك يدور حول محوره المحلي الذي يمر عبر مركزه بغض النظر عما أسميه:

function rotateAroundObjectAxis( object, axis, radians ) { .. }

أو

function rotateAroundWorldAxis( object, axis, radians ) { .. }

ما أريد معرفته حقًا هو كيفية تحويل محور دوران كائن معين.

تشكرات.

هل جربت تدوير الدمية / الحاوية بدلاً من المكعب؟

نقطة جيدة. إنه يعمل بهذه الطريقة.

لكن لماذا ليس مضيقًا جدًا :-)؟

أعتقد أنه يجب أن تكون بعض المصفوفات حسابية باستخدام الوظيفة التي اقترحتها في رسالتي الأولية أو شيء أكثر ملاءمة.

function rotateAroundArbitraryAxis( object, axisDirection, axisBasePoint, radians ) { .. }

بواسطة محور بيسبوينت أعني النقطة التي يمر بها المحور المحدد.

مع أطيب التحيات.

تضمين التغريدة نعم ، نسيت ذلك على مقتطفاتي.

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

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات