سؤال

نظرا اثنين 3D المتجهات A و B, أريد أن اشتقاق دوران المصفوفة التي تدور من أ إلى ب.

هذا هو ما جئت به:

  1. تستمد من جيب التمام acos(أ .ب)
  2. تستمد شرط من asin(|أ × ب| / (|أ| * |ب|))
  3. استخدام A x B محور الدوران
  4. استخدام مصفوفة معينة بالقرب من أسفل هذه الصفحة (محور زاوية)

هذا يعمل بشكل جيد باستثناء تناوب 0° (الذي تجاهل) و 180° (التي تعامل على أنها حالة خاصة).هل هناك أكثر رشيقة طريقة للقيام بذلك باستخدام Direct3D المكتبة ؟ أنا أبحث عن Direct3D محددة الإجابة.

تحرير:إزالة acos و كمافي (انظر هيو ألن ما بعد)

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

المحلول

هو على الأرجح أكثر من خطأ مطبعي من thinko ، ولكن acos(أ. ب) زاوية ، وليس لها التمام.وبالمثل نقطة 2.

يمكنك حساب الخطيئة من كوس باستخدام sin^2 + جتا^2 = 1.هذا هو الخطيئة = الجذر التربيعي(1-cos*cos).هذا أرخص من ناقلات التعبير الذي تستخدمه ، و أيضا القضاء على الحالات الخاصة 0/180 درجة.

نصائح أخرى

لا تستطيع القيام بذلك بأفضل طريقة ممكنة.لا أعتقد أن هناك المدمج في DirectX وظيفة في أن يفعل ما تريد.الخطوة 4 ، يمكنك استخدام D3DXMatrixRotationAxis().فقط كن حذرا حول حافة الحالات, مثل عندما |أ| أو |ب| صفر ، أو عندما تكون زاوية 0 درجة أو 180 درجة مئوية.

كنت قد ننظر في المقالة التالية من سيغراف وصلة النص

ربما يمكنك استخدام D3DXMatrixLookAtLH ?

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