Frage

Ich habe einen manipulierten (zweibeinigen) und animierte Modell in 3D Studio Max, die ich als .x-Datei exportiert haben.

Wenn ich es die Animationen verwenden laufen gut, aber ich habe das Modell selbst zu bekommen versuche, aus der Hüfte zu lehnen und drehen, aber ich Schwierigkeiten, die bei der Suche nach den in den Knochen Hierarchie soll ich die Drehmatrizen anwenden.

In 3D Studio Max gibt es ein BIPE Objekt auf dem Modell namens Bip01, wenn ich wählen, und drehen es die Dreh Kaskaden auf alle Knochen oberhalb der Hüfte so ging ich davon aus, dass applyhing Drehmatrizen auf den gleichen D3DXFRAME (die den gleichen Namen hat , die gleiche Wirkung hätte Bip01), aber es funktioniert nicht. Was passiert, ist der Effekt landet in den Knochen Hierarchie alles Anwendung so Transformationen Bip01 Anwendung ist, wie es auf der Strecke Knochen Anwendung (die es auch sein mag, wie ich bin nicht sicher, wie man Knochen von dem anderen zu sagen).

Hier ist der Code, wo Rahmen Transformationen zu aktualisieren sind, und ich habe ein Stück Code hinzugefügt versucht, die Matrixtransformation auf Bip01 anzuwenden, ich ist nicht sicher, ob es ein anderer relevanter Code kann ich zeigen ... (die Rotation Wert ist nur ein Zufallswert ich warf in)

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

if (strcmp (pFrame-> Name "Bip01") == 0)      {       D3DXMATRIX verrotten; D3DXMatrixRotationY (& rot, 3.141);        D3DXMatrixMultiply (& pFrame-> TransformationMatrix,                             & PFrame-> TransformationMatrix,                             & Rot);      }

    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 );
 }
}

* Was ich denke, ich sollte alles tun, um die Kinder ist das Auffinden Rahmen für Bip01 und gelten die ihnen verwandeln, aber wie mache ich das?

War es hilfreich?

Lösung

Bip01 ist der Wurzelknoten für das Skelett in Character Studio - das nehme ich an, wo Sie eingerichtet ist Skelett
. So Ihr Code korrekt heißt eine Drehung Anwendung bip01 und dass dann abstürzende zu allen seinen Kindern werden alle Knochen im Skelett aktualisieren.

Ich vermute (und es ist insgesamt Vermutung), dass der Grund, warum Sie nicht diese in 3D Studio Max sehen ist, weil es mit einem Bündel von Einschränkungen eingerichtet ist der Animator zu helfen.

Was würde ich vorschlagen zu tun ist, um die Knochen Namen zu finden - sie folgen in der Regel eine Konvention von bip01 - L Finger 1 usw. Sie dann den Namen des Hüftknochens finden (es ist wahrscheinlich Bip01 genannt - Hip).
Alternativ beim Start in Ihren Code, iterieren von Bip01 hinunter alle Kinder und bauen ein Wörterbuch aller Knochen Namen auf.

Ich bin sicher, es gibt eine bessere Antwort, aber als mein 3DS max ist ziemlich rostig, die über das beste, das ich jetzt tun kann:)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top