سؤال

أنا أتعلم DirectX 11 ووصلت إلى النقطة التي يظهر فيها مربع.يتم تعريف القمم الأربعة الخاصة بي على النحو التالي:

VertexPos vertices[] = 
{
    XMFLOAT3(-0.2f, 0.2f, 0.2f),
    XMFLOAT3(0.2f, 0.2f, 0.2f),
    XMFLOAT3(-0.2f, -0.2f, 0.2f),
    XMFLOAT3(0.2f, -0.2f, 0.2f)

};

ثم يمرون بالمراحل اللازمة للعرض على الشاشة (مثل عالم برمجة DirectX).لقد قمت بدمج بعض التعليمات البرمجية من عرض توضيحي للإدخال المباشر وأرغب في أن أتمكن من تحريك المربع باستخدام مفاتيح الأسهم.لدي حتى الآن:

void SquareMove::Update( float dt )
{    
    keyboardDevice_->GetDeviceState(sizeof(keyboardKeys_), (LPVOID)&keyboardKeys_);

    // Button down event.
    if (KEYDOWN(prevKeyboardKeys_, DIK_DOWN) && !KEYDOWN(keyboardKeys_, DIK_DOWN))
    {
    PostQuitMessage(0);
    }

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

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

المحلول

أنا لست واضحا تماما إذا فهمت فعلا تأثير مصفوفة الترجمة أم لا. هناك العديد من البرامج التعليمية الرائعة لإرشادك للحصول على تفاصيل التنفيذ، لذلك أود فقط أن أشارك ما هو مثير للاهتمام بالنسبة لي - الطريقة التي فهمت فيها أن أتقدم أولا.

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

يتم تحقيق

في تقديم كائن من خلال المصفوفات. تحتوي كل مصفوفة على قيم في مناصب معينة عند مضاعفة إحداثيات الكائن بطريقة ما تغيرها بطريقة ما. ينطبق تطبيقها على إحداثيات الكائن (عبر الضرب) تحويلات نتيجة - قد يتم تدوير كائن لأول مرة - سيؤدي ذلك أولا إلى تدويره حول مركز عالمك، أي حوالي (0،0،0)، ثم تترجم، ثم استدارة مرة أخرى. .. هذا هو مجرد الضرب 3 المصفوفات.

قد يتم العثور على التنفيذ المحدد في الكثير من الأماكن: http: / /ww.directxtutorial.com/lesson.aspx؟lessonid=9-4-5

نصائح أخرى

فقط من أجل الاكتمال هذه هي الطريقة التي تمكنت من القيام بها.في وظيفة التقديم أضفت ما يلي

XMMATRIX m_Translation = XMMatrixTranslation(0.0f, fY, 0.0f);
XMMATRIX mvp = world*vpMatrix_*m_Translation;

(في السابق كان مجرد world*viewPortMatrix)

حيث تم التحكم في السنة المالية عبر أحداث الزر

if (KEYDOWN(prevKeyboardKeys_, DIK_DOWN) && !KEYDOWN(keyboardKeys_, DIK_DOWN))
{
    fY -= 0.1f;
}

وعند تشغيل التطبيق يتحرك جسمي!

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