سؤال

لدي 3 ملاذ، لأعلى يمين وجبهة تمثل الاتجاه.

أحتاج إلى تحويل هذه إلى زاوية XYZ (3 أومان) حتى أتمكن من استخدامها مع GLROTATEF ()

الرجاء المساعدة

تعديل

ليس العرض بشكل صحيح. هل تستطيع أن ترى ما إذا كان أي شيء صارخ هنا: pastebin.com/f6683492d.

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

المحلول

أفترض أنك تعني "أعلى، يمين وإلى الأمام" لأن DOWN هو عكس ما يصل ولا يساهم في أي معلومات جديدة.
سؤالك ليس واضحا جدا لكنني أعتقد أنك تعني أنك تريد إنشاء تحويل إلى قاعدة الإحداثيات الجديدة التي يتم تعريفها بواسطة ناقلات تصفها. إذا كانت هذه المخلفات متعامدة (لديك 90 درجة بينهما)، فلن تحتاج إلى الذهاب من خلال كل مكان عناء حساب الزوايا واستخدام GlRotate (). بدلا من ذلك، يمكنك استخدام ناقلات القاعدة الجديدة مباشرة كتحول.

قل المتجهات الخاصة بك هي (A1، A2، A3) - أعلى، B (B1، B2، B3) - يمين و C (C1، C2، C3) - إلى الأمام. أولا، إذا لم تكن متعامدة تماما، فأنت بحاجة إلى التأكد من أنها تصبح متعامدة، وربما مع عدد قليل من المنتجات عبر. ثانيا، تحتاج إلى التأكد من طولها 1. إنشاء المصفوفة التالية الآن:

a1 b1 c1 0
a2 b2 c2 0
a3 b3 c3 0
0  0  0  1

هذه هي مصفوفة الدوران التي ستجلب لك من قاعدة الوحدة إلى القاعدة المعرفة بواسطة A، B، C مع هذا المصفوفة، كل ما عليك فعله هو استخدام GLMultMatrix () وأنت انتهيت. إذا حاول الأول لا يعمل، فإن نقل المصفوفة قد يصلحه.


تعديل بعد التحقق مرة أخرى، يجب أن يكون الترتيب الصحيح للمصفوفة مثل ذلك: بالنسبة للمتاجر A (AX، AY، AZ)، B (BX، BY، BZ)، C (CX، CY، CZ)

ax ay az 0
bx by bz 0
cx cy cz 0
0  0  0  1

هذا هو مبيعات الإجابة المذكورة أعلاه. أيضا، أوصي بأن تحاول أولا معرفة ما إذا كانت تعمل دون ترجمة. ثم يمكنك إضافة الترجمة بمجرد إضافة ذلك إلى المصفوفة مثل ذلك:

ax     ay     az     0
bx     by     bz     0
cx     cy     cz     0
pos.x  pos.y  pos.z  1

نصائح أخرى

x = acos( dp3( nrm( up ), new vec3( 0, 1, 0 ) ) );
y = acos( dp3( nrm( dir ), new vec3( 0, 0, 1 ) ) );
z = acos( dp3( nrm( right ), new vec3( 1, 0, 0 ) ) );

حيث DP3 هو منتج نقطة مكونة مكونة، NRM يطبيع ناقلات مكون 3 ويعيش VEC3 واحدا على النحو المحدد.

هذا سوف يمنحك الزاوية بين VCTR لديك و أ تنسيق التنسيق الافتراضي.

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

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