- Moderatör
- #1
Słyszę, słyszę letni powiew.
Kurucu
Kısaca bone idleri kullanarak bonelerin pozisyonlarını çekebilirsiniz.
Shortly, you can get bone xyz with using bones ıd.
Shortly, you can get bone xyz with using bones ıd.
C++:
class Model
{
public:
char _0x0000[808];
Animator* pAnimator; //0x0328
char _0x032C[132];
D3DXMATRIX Position; //0x03B0
char _0x03F0[1104];
};//Size=0x0840
class Animator
{
public:
char _0x0000[32];
WORD BoneCount; //0x0020
char _0x0022[1282];
BoneName* pBoneName; //0x0524
CharacterType* pCharacter; //0x0528
char _0x052C[1092];
Matrics* pMatrics; //0x0970
char _0x0974[64];
};//Size=0x09B4
class Matrics
{
public:
D3DXMATRIX Bone[58]; //0x0000
};//Size=0x0040
class CharacterType
{
public:
char Name[32]; //0x0000
};//Size=0x0020
C++:
int BoneCount = pModel->pAnimator->BoneCount;
int BoneID = 0;
for( WORD x = 0; x < BoneCount; x++ )
{
if ( !stricmp( pModel->pAnimator->pBoneName->Name[x], "biped head" ) )
BoneID = x;
}
if ( BoneID != 0 )
{
D3DXVECTOR3 Head = GetBonePosition( pModel, BoneID );
D3DXVECTOR2 vIn;
if ( WorldToScreen( Head, vIn ) )
{
DrawString( vIn.x, vIn.y, DT_CENTER, 0xFF00FF00, "test" );
}
}
C++:
int BoneCount = pModel->pAnimator->BoneCount;
for( WORD x = 0; x < BoneCount; x++ )
{
D3DXVECTOR3 Head = GetBonePosition( pModel, x );
D3DXVECTOR2 vIn;
if ( WorldToScreen( Head, vIn ) )
{
DrawString( vIn.x, vIn.y, DT_CENTER, 0xFF00FF00, "%s", pModel->pAnimator->pBoneName->Name[x] );
}
}
C++:
D3DXVECTOR3 GetBonePosition( Model* pModel, int BoneId )
{
D3DXMATRIX pM1 = pModel->pAnimator->pMatrics->Bone[BoneId];
D3DXMATRIX pM2 = pModel->Position;
D3DXMATRIX pOut;
pOut._41 = pM1._41 * pM2._11 + pM1._42 * pM2._21 + pM1._43 * pM2._31 + pM1._44 * pM2._41; // x
pOut._42 = pM1._41 * pM2._12 + pM1._42 * pM2._22 + pM1._43 * pM2._32 + pM1._44 * pM2._42; // y
pOut._43 = pM1._41 * pM2._13 + pM1._42 * pM2._23 + pM1._43 * pM2._33 + pM1._44 * pM2._43; // z
return D3DXVECTOR3( pOut._41, pOut._42, pOut._43 );