يتصرف العظام بشكل مختلف في 3D Studio Max DirectX أو أي شيء آخر؟

StackOverflow https://stackoverflow.com/questions/2213303

سؤال

لدي نموذج مزور (BRIPED) والرسوم المتحركة في 3D Studio Max الذي قمت بتصديره كملف .x.

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

في 3D Studio Max، يوجد كائن بحري على الطراز يسمى BIP01، عندما أقوم باختيار وتدويره تآكل الدوران على جميع العظام فوق الورك، لذلك افترضت أن تطبيق مصفوفات الدوران على نفس D3DxFrame (الذي يحتوي على نفس الاسم، BIP01) سيكون لها نفس التأثير ولكنها لا. ما يحدث هو أن التأثير ينتهي التطبيق على كل شيء في التسلسل الهرمي للعظام، لذا فإن تطبيق التحولات إلى BIP01 يشبه تطبيقه على عظم الطريق (والتي قد تكون متأكدا من كيفية معرفة عظم واحد من الآخر).

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

void CAnimInstance::UpdateFrames( MultiAnimFrame* pFrame, D3DXMATRIX* pmxBase )
{
    assert( pFrame != NULL );
    assert( pmxBase != NULL );

إذا (STRCMP (PFRAME-> الاسم "BIP01") == 0) {D3DXMatrix تعفن؛ D3DXMatristrotationy (والعفن، 3.141)؛ D3DXMATRICTILSMULTIPLY (& PFRAME-> تحويل MUTMATRIX، & PFRAME-> تحويل ميماتريكس، & تعفن)؛ }

    D3DXMatrixMultiply( &pFrame->TransformationMatrix,
                        &pFrame->TransformationMatrix,
                        pmxBase );


    // transform siblings by the same matrix
    if( pFrame->pFrameSibling )
        UpdateFrames( ( MultiAnimFrame* )pFrame->pFrameSibling, pmxBase );

    // transform children by the transformed matrix - hierarchical transformation
    if( pFrame->pFrameFirstChild )
 {
  UpdateFrames( ( MultiAnimFrame* )pFrame->pFrameFirstChild,
    &pFrame->TransformationMatrix );
 }
}

* ما أعتقد أنه يجب أن أفعله هو العثور على جميع إطارات الأطفال BIP01 وتطبيق التحويل إليهم ولكن كيف أفعل ذلك؟

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

المحلول

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

أنا أظن (وهو تخمين إجمالي) أن السبب وراء عدم رؤية هذا في 3D Studio Max هو أنه تم إعداده بمجموعة من القيود لمساعدة الرسوم المتحركة.

ما أقترح القيام به هو العثور على أسماء العظام - وعادة ما يتبعون اتفاقية BIP01 - L إصبع 1 وما إلى ذلك، ثم ابحث عن اسم عظم الورك (ربما يسمى BIP01 - HIP).
بدلا من ذلك عند بدء التشغيل في التعليمات البرمجية الخاصة بك، تكرر من BIP01 أسفل جميع الأطفال وبناء قاموس بجميع أسماء العظام.

أنا متأكد من وجود إجابة أفضل ولكن كما ك Max Max Max هو صدئ جدا في أفضل ما يمكنني فعله الآن :)

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