سؤال

في الكود ، أحاول تشغيل اثنين (في الوقت الحالي ، وربما أكثر في المستقبل) تحولات مصفوفة على مصفوفة العالم. مثل ذلك:

D3DXMatrixRotationY(&worldMatrix, rotation);
D3DXMatrixTranslation(&worldMatrix, 0.0f, -1.0f, 0.0f);

حيث الدوران هو عائم متغير و WorldMatrix هو d3dxmatrix. مشكلتي هي أن السطر الأخير من التعليمات البرمجية فقط في عبارات التحول يعمل. لذلك في الكود أعلاه ، سيتم ترجمة WorldMatrix ، ولكن لم يتم تدويرها. ولكن إذا قمت بتبديل ترتيب البيانين ، فسيتم تدوير WorldMatrix ، ولكن لم يتم ترجمته. ومع ذلك ، لعبت معها ، وهذا الرمز يعمل بشكل جيد:

D3DXMatrixRotationY(&worldMatrix, rotation);
D3DXMATRIX temp = worldMatrix;
D3DXMatrixTranslation(&worldMatrix, 0.0f, -1.0f, 0.0f);
worldMatrix *= temp;

بعد ذلك ، تتم ترجمة WorldMatrix وتدويرها. لماذا لا تعمل إذا كنت أستخدم المتغيرات فقط ولا تتضمن مصفوفة temp؟ شكرًا لك!!

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

المحلول

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

D3DXMatrix rot;
D3DXMatrix trans;
D3DXMatrixRotationY(&rot, rotation);
D3DXMatrixTranslation(&trans, 0.0f, -1.0f, 0.0f);
D3DXMatrix world = rot * trans;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top