Подпишитесь на наш Telegram-канал, чтобы всегда быть в курсе важных обновлений! Перейти

PUBG - Skeleton bone ESP

  • Автор темы Автор темы Kano
  • Дата начала Дата начала
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
9 Фев 2017
Сообщения
29
Реакции
9
Даю общий доступ к моему коду для написания ESP.

Для справки, соответствующие идентификаторы костей соответствуют этим местам;
76nW8z9.png

В сущности вы будете должны прочитать ComponentToWorld что FTransform внутри USkeletalMeshComponent.
Он не определен в SDK, поэтому вам придется найти его вручную.

ComponentToWorld = AActor + 0x400] + 0x190
Код:
Expand Collapse Copy
actor.ComponentToWorld = ReadFTransform(mesh+ 0x190);
Код:
Expand Collapse Copy
public class FTransform
    {
        public Vector4 Rotation;
        public Vector3 Translation;
        public Vector3 Scale3D;
        public FTransform(Vector4 rot, Vector3 translation, Vector3 scale)
        {
            Rotation = rot;
            Translation = translation;
            Scale3D = scale;
        }
 
        public Matrix ToMatrixWithScale()
        {
            Matrix m = new Matrix();
 
            m.M41 = Translation.X;
            m.M42 = Translation.Y;
            m.M43 = Translation.Z;
 
            float x2 = Rotation.X + Rotation.X;
            float y2 = Rotation.Y + Rotation.Y;
            float z2 = Rotation.Z + Rotation.Z;
 
            float xx2 = Rotation.X * x2;
            float yy2 = Rotation.Y * y2;
            float zz2 = Rotation.Z * z2;
            m.M11 = (1.0f - (yy2 + zz2)) * Scale3D.X;
            m.M22 = (1.0f - (xx2 + zz2)) * Scale3D.Y;
            m.M33 = (1.0f - (xx2 + yy2)) * Scale3D.Z;
 
 
            float yz2 = Rotation.Y * z2;
            float wx2 = Rotation.W * x2;
            m.M32 = (yz2 - wx2) * Scale3D.Z;
            m.M23 = (yz2 + wx2) * Scale3D.Y;
 
 
            float xy2 = Rotation.X * y2;
            float wz2 = Rotation.W * z2;
            m.M21 = (xy2 - wz2) * Scale3D.Y;
            m.M12 = (xy2 + wz2) * Scale3D.X;
 
 
            float xz2 = Rotation.X * z2;
            float wy2 = Rotation.W * y2;
            m.M31 = (xz2 + wy2) * Scale3D.Z;
            m.M13 = (xz2 - wy2) * Scale3D.X;
 
            m.M14 = 0.0f;
            m.M24 = 0.0f;
            m.M34 = 0.0f;
            m.M44 = 1.0f;
 
            return m;
        }
    }
Код:
Expand Collapse Copy
 public FTransform ReadFTransform(long ptr)
        {
            //i know this is shitty. I still dont care.
            float quatX = ReadFloat(ptr + 0x00);
            float quatY = ReadFloat(ptr + 0x04);
            float quatZ = ReadFloat(ptr + 0x08);
            float quatW = ReadFloat(ptr + 0x0C);
 
            float transX = ReadFloat(ptr + 0x0010);
            float transY = ReadFloat(ptr + 0x0014);
            float transZ = ReadFloat(ptr + 0x0018);
 
            float scaleX = ReadFloat(ptr + 0x0020);
            float scaleY = ReadFloat(ptr + 0x0024);
            float scaleZ = ReadFloat(ptr + 0x0028);
 
            Vector4 fQuat = new Vector4(quatW, quatX, quatY, quatZ);
            Vector3 trans = new Vector3(transX, transY, transZ);
            Vector3 scale = new Vector3(scaleX, scaleY, scaleZ);
            FTransform fTransform = new FTransform(fQuat, trans, scale);
            return fTransform;
        }

Вот мой внешний метод GetBoneIndex.
Это будет читать отдельные вектора костей из массива, который содержит все кости.
Массив называется "Cachedbone Space Transforms", но SDK не имеет никаких ссылок на него, поэтому вам придется найти это вручную, если он изменился.
Код:
Expand Collapse Copy
        public FTransform GetBoneIndex(long actorPtr, int boneIndex)
        {
            long mesh = ReadInt64(actorPtr + 0x400); //USkeletalMeshComponent
            long arrayBones = ReadInt64(mesh + 0x0790); //CachedBoneSpaceTransforms
            var transform = ReadFTransform(arrayBones + (boneIndex * 0x30));
            return transform;
        }
Это получает местоположение каждой из костей.
Код:
Expand Collapse Copy
        public Vector3 GetBoneWithRotation(int id, ArrayActorInfo actor)
        {
            var bone = GetBoneIndex(actor.BasePointer , id); //get the bone vector without any rotation applied
 
            var boneMatrix = bone.ToMatrixWithScale();
            var componentToWorldMatrix = actor.ComponentToWorld.ToMatrixWithScale(); //bone translations are applied to ComponentToWorld matrix
            var newMatrix = boneMatrix * componentToWorldMatrix;
 
            return new Vector3(newMatrix.M41, newMatrix.M42, newMatrix.M43);
        }
Последние идентификаторы костей:
Код:
Expand Collapse Copy
    enum Bone : int
    {
        Root = 0,
        pelvis = 1,
        spine_01 = 2,
        spine_02 = 3,
        spine_03 = 4,
        neck_01 = 5,
        Head = 6,
        face_root = 7,
        eyebrows_pos_root = 8,
        eyebrows_root = 9,
        eyebrows_r = 10,
        eyebrows_l = 11,
        eyebrow_l = 12,
        eyebrow_r = 13,
        forehead_root = 14,
        forehead = 15,
        jaw_pos_root = 16,
        jaw_root = 17,
        jaw = 18,
        mouth_down_pos_root = 19,
        mouth_down_root = 20,
        lip_bm_01 = 21,
        lip_bm_02 = 22,
        lip_br = 23,
        lip_bl = 24,
        jaw_01 = 25,
        jaw_02 = 26,
        cheek_pos_root = 27,
        cheek_root = 28,
        cheek_r = 29,
        cheek_l = 30,
        nose_side_root = 31,
        nose_side_r_01 = 32,
        nose_side_r_02 = 33,
        nose_side_l_01 = 34,
        nose_side_l_02 = 35,
        eye_pos_r_root = 36,
        eye_r_root = 37,
        eye_rot_r_root = 38,
        eye_lid_u_r = 39,
        eye_r = 40,
        eye_lid_b_r = 41,
        eye_pos_l_root = 42,
        eye_l_root = 43,
        eye_rot_l_root = 44,
        eye_lid_u_l = 45,
        eye_l = 46,
        eye_lid_b_l = 47,
        nose_pos_root = 48,
        nose = 49,
        mouth_up_pos_root = 50,
        mouth_up_root = 51,
        lip_ul = 52,
        lip_um_01 = 53,
        lip_um_02 = 54,
        lip_ur = 55,
        lip_l = 56,
        lip_r = 57,
        hair_root = 58,
        hair_b_01 = 59,
        hair_b_02 = 60,
        hair_l_01 = 61,
        hair_l_02 = 62,
        hair_r_01 = 63,
        hair_r_02 = 64,
        hair_f_02 = 65,
        hair_f_01 = 66,
        hair_b_pt_01 = 67,
        hair_b_pt_02 = 68,
        hair_b_pt_03 = 69,
        hair_b_pt_04 = 70,
        hair_b_pt_05 = 71,
        camera_fpp = 72,
        GunReferencePoint = 73,
        GunRef = 74,
        breast_l = 75,
        breast_r = 76,
        clavicle_l = 77,
        upperarm_l = 78,
        lowerarm_l = 79,
        hand_l = 80,
        thumb_01_l = 81,
        thumb_02_l = 82,
        thumb_03_l = 83,
        thumb_04_l_MBONLY = 84,
        index_01_l = 85,
        index_02_l = 86,
        index_03_l = 87,
        index_04_l_MBONLY = 88,
        middle_01_l = 89,
        middle_02_l = 90,
        middle_03_l = 91,
        middle_04_l_MBONLY = 92,
        ring_01_l = 93,
        ring_02_l = 94,
        ring_03_l = 95,
        ring_04_l_MBONLY = 96,
        pinky_01_l = 97,
        pinky_02_l = 98,
        pinky_03_l = 99,
        pinky_04_l_MBONLY = 100,
        item_l = 101,
        lowerarm_twist_01_l = 102,
        upperarm_twist_01_l = 103,
        clavicle_r = 104,
        upperarm_r = 105,
        lowerarm_r = 106,
        hand_r = 107,
        thumb_01_r = 108,
        thumb_02_r = 109,
        thumb_03_r = 110,
        thumb_04_r_MBONLY = 111,
        index_01_r = 112,
        index_02_r = 113,
        index_03_r = 114,
        index_04_r_MBONLY = 115,
        middle_01_r = 116,
        middle_02_r = 117,
        middle_03_r = 118,
        middle_04_r_MBONLY = 119,
        ring_01_r = 120,
        ring_02_r = 121,
        ring_03_r = 122,
        ring_04_r_MBONLY = 123,
        pinky_01_r = 124,
        pinky_02_r = 125,
        pinky_03_r = 126,
        pinky_04_r_MBONLY = 127,
        item_r = 128,
        lowerarm_twist_01_r = 129,
        upperarm_twist_01_r = 130,
        BackPack = 131,
        backpack_01 = 132,
        backpack_02 = 133,
        Slot_Primary = 134,
        Slot_Secondary = 135,
        Slot_Melee = 136,
        slot_throwable = 137,
        coat_l_01 = 138,
        coat_l_02 = 139,
        coat_l_03 = 140,
        coat_l_04 = 141,
        coat_fl_01 = 142,
        coat_fl_02 = 143,
        coat_fl_03 = 144,
        coat_fl_04 = 145,
        coat_b_01 = 146,
        coat_b_02 = 147,
        coat_b_03 = 148,
        coat_b_04 = 149,
        coat_r_01 = 150,
        coat_r_02 = 151,
        coat_r_03 = 152,
        coat_r_04 = 153,
        coat_fr_01 = 154,
        coat_fr_02 = 155,
        coat_fr_03 = 156,
        coat_fr_04 = 157,
        thigh_l = 158,
        calf_l = 159,
        foot_l = 160,
        ball_l = 161,
        calf_twist_01_l = 162,
        thigh_twist_01_l = 163,
        thigh_r = 164,
        calf_r = 165,
        foot_r = 166,
        ball_r = 167,
        calf_twist_01_r = 168,
        thigh_twist_01_r = 169,
        Slot_SideArm = 170,
        skirt_l_01 = 171,
        skirt_l_02 = 172,
        skirt_l_03 = 173,
        skirt_f_01 = 174,
        skirt_f_02 = 175,
        skirt_f_03 = 176,
        skirt_b_01 = 177,
        skirt_b_02 = 178,
        skirt_b_03 = 179,
        skirt_r_01 = 180,
        skirt_r_02 = 181,
        skirt_r_03 = 182,
        ik_hand_root = 183,
        ik_hand_gun = 184,
        ik_hand_r = 185,
        ik_hand_l = 186,
        ik_aim_root = 187,
        ik_aim_l = 188,
        ik_aim_r = 189,
        ik_foot_root = 190,
        ik_foot_l = 191,
        ik_foot_r = 192,
        camera_tpp = 193,
        ik_target_root = 194,
        ik_target_l = 195,
        ik_target_r = 196,
        VB_spine_03_spine_03 = 197,
        VB_upperarm_r_lowerarm_r = 198
    }
Объедините их в скелет. (каждый массив является частью, которая должна быть нарисована индивидуально)
Код:
Expand Collapse Copy
   static Bone[ ] skeletonUpper = new Bone[ ] {
            Bone.forehead, Bone.Head, Bone.neck_01,
        };
        static Bone[ ] skeletonRightArm = new Bone[ ] {
            Bone.neck_01, Bone.upperarm_r, Bone.lowerarm_r, Bone.hand_r
        };
        static Bone[ ] skeletonLeftArm = new Bone[ ] {
            Bone.neck_01, Bone.upperarm_l, Bone.lowerarm_l, Bone.hand_l
        };
        static Bone[ ] skeletonSpine = new Bone[ ] {
            Bone.neck_01, Bone.spine_01, Bone.spine_02, Bone.pelvis
        };
        static Bone[ ] skeletonLowerRight = new Bone[ ] {
            Bone.pelvis, Bone.thigh_r, Bone.calf_r, Bone.foot_r
        };
        static Bone[ ] skeletonLowerLeft = new Bone[ ] {
            Bone.pelvis, Bone.thigh_l, Bone.calf_l, Bone.foot_l
        };
        static Bone[ ][ ] skeleton = new Bone[ ][ ] {
            skeletonUpper, skeletonLeftArm, skeletonRightArm, skeletonSpine, skeletonLowerRight, skeletonLowerLeft
        };
И, наконец, провести линии между каждой костью..
Код:
Expand Collapse Copy
foreach (Bone[ ] part in skeleton)
{
    Vector3 previousBone = new Vector3();
    foreach (Bone b in part)
    {
        var currentBone = GetBoneWithRotation((int)b, actor);
 
        if (previousBone.X == 0) //first bone no draw happens
        {
            previousBone = currentBone;
            continue;
        }
        else
        {
            //draw line from previousBone to currentBone W2S
            DrawLine3D(previousBone, currentBone);
            previousBone = currentBone;
        }
    }
}
У вас будет что-то вроде этого
5vK7pfK.png
 
Для PUBG lite данный исходник пойдет?
 
[QUOTE = "Kano, publicación: 397286, miembro: 12636"]
Comparto mi código para escribir ESP.

Для справки, соответствующие идентификаторы костей соответствуют этим местам;
76nW8z9.png

В сущности вы будете должны прочитать ComponentToWorld что FTransform внутри USkeletalMeshComponent.
Он не определен в SDK, поэтому вам придется найти его вручную.

ComponentToWorld = AActor + 0x400] + 0x190
Код:
Expand Collapse Copy
actor.ComponentToWorld = ReadFTransform(mesh+ 0x190);
Код:
Expand Collapse Copy
public class FTransform
    {
        public Vector4 Rotation;
        public Vector3 Translation;
        public Vector3 Scale3D;
        public FTransform(Vector4 rot, Vector3 translation, Vector3 scale)
        {
            Rotation = rot;
            Translation = translation;
            Scale3D = scale;
        }

        public Matrix ToMatrixWithScale()
        {
            Matrix m = new Matrix();

            m.M41 = Translation.X;
            m.M42 = Translation.Y;
            m.M43 = Translation.Z;

            float x2 = Rotation.X + Rotation.X;
            float y2 = Rotation.Y + Rotation.Y;
            float z2 = Rotation.Z + Rotation.Z;

            float xx2 = Rotation.X * x2;
            float yy2 = Rotation.Y * y2;
            float zz2 = Rotation.Z * z2;
            m.M11 = (1.0f - (yy2 + zz2)) * Scale3D.X;
            m.M22 = (1.0f - (xx2 + zz2)) * Scale3D.Y;
            m.M33 = (1.0f - (xx2 + yy2)) * Scale3D.Z;


            float yz2 = Rotation.Y * z2;
            float wx2 = Rotation.W * x2;
            m.M32 = (yz2 - wx2) * Scale3D.Z;
            m.M23 = (yz2 + wx2) * Scale3D.Y;


            float xy2 = Rotation.X * y2;
            float wz2 = Rotation.W * z2;
            m.M21 = (xy2 - wz2) * Scale3D.Y;
            m.M12 = (xy2 + wz2) * Scale3D.X;


            float xz2 = Rotation.X * z2;
            float wy2 = Rotation.W * y2;
            m.M31 = (xz2 + wy2) * Scale3D.Z;
            m.M13 = (xz2 - wy2) * Scale3D.X;

            m.M14 = 0.0f;
            m.M24 = 0.0f;
            m.M34 = 0.0f;
            m.M44 = 1.0f;

            return m;
        }
    }
Код:
Expand Collapse Copy
 public FTransform ReadFTransform(long ptr)
        {
            //i know this is shitty. I still dont care.
            float quatX = ReadFloat(ptr + 0x00);
            float quatY = ReadFloat(ptr + 0x04);
            float quatZ = ReadFloat(ptr + 0x08);
            float quatW = ReadFloat(ptr + 0x0C);

            float transX = ReadFloat(ptr + 0x0010);
            float transY = ReadFloat(ptr + 0x0014);
            float transZ = ReadFloat(ptr + 0x0018);

            float scaleX = ReadFloat(ptr + 0x0020);
            float scaleY = ReadFloat(ptr + 0x0024);
            float scaleZ = ReadFloat(ptr + 0x0028);

            Vector4 fQuat = new Vector4(quatW, quatX, quatY, quatZ);
            Vector3 trans = new Vector3(transX, transY, transZ);
            Vector3 scale = new Vector3(scaleX, scaleY, scaleZ);
            FTransform fTransform = new FTransform(fQuat, trans, scale);
            return fTransform;
        }

Вот мой внешний метод GetBoneIndex.
Это будет читать отдельные вектора костей из массива, который содержит все кости.
Массив называется "Cachedbone Space Transforms", но SDK не имеет никаких ссылок на него, поэтому вам придется найти это вручную, если он изменился.
Код:
Expand Collapse Copy
        public FTransform GetBoneIndex(long actorPtr, int boneIndex)
        {
            long mesh = ReadInt64(actorPtr + 0x400); //USkeletalMeshComponent
            long arrayBones = ReadInt64(mesh + 0x0790); //CachedBoneSpaceTransforms
            var transform = ReadFTransform(arrayBones + (boneIndex * 0x30));
            return transform;
        }
Это получает местоположение каждой из костей.
Код:
Expand Collapse Copy
        public Vector3 GetBoneWithRotation(int id, ArrayActorInfo actor)
        {
            var bone = GetBoneIndex(actor.BasePointer , id); //get the bone vector without any rotation applied

            var boneMatrix = bone.ToMatrixWithScale();
            var componentToWorldMatrix = actor.ComponentToWorld.ToMatrixWithScale(); //bone translations are applied to ComponentToWorld matrix
            var newMatrix = boneMatrix * componentToWorldMatrix;

            return new Vector3(newMatrix.M41, newMatrix.M42, newMatrix.M43);
        }
Последние идентификаторы костей:
Код:
Expand Collapse Copy
    enum Bone : int
    {
        Root = 0,
        pelvis = 1,
        spine_01 = 2,
        spine_02 = 3,
        spine_03 = 4,
        neck_01 = 5,
        Head = 6,
        face_root = 7,
        eyebrows_pos_root = 8,
        eyebrows_root = 9,
        eyebrows_r = 10,
        eyebrows_l = 11,
        eyebrow_l = 12,
        eyebrow_r = 13,
        forehead_root = 14,
        forehead = 15,
        jaw_pos_root = 16,
        jaw_root = 17,
        jaw = 18,
        mouth_down_pos_root = 19,
        mouth_down_root = 20,
        lip_bm_01 = 21,
        lip_bm_02 = 22,
        lip_br = 23,
        lip_bl = 24,
        jaw_01 = 25,
        jaw_02 = 26,
        cheek_pos_root = 27,
        cheek_root = 28,
        cheek_r = 29,
        cheek_l = 30,
        nose_side_root = 31,
        nose_side_r_01 = 32,
        nose_side_r_02 = 33,
        nose_side_l_01 = 34,
        nose_side_l_02 = 35,
        eye_pos_r_root = 36,
        eye_r_root = 37,
        eye_rot_r_root = 38,
        eye_lid_u_r = 39,
        eye_r = 40,
        eye_lid_b_r = 41,
        eye_pos_l_root = 42,
        eye_l_root = 43,
        eye_rot_l_root = 44,
        eye_lid_u_l = 45,
        eye_l = 46,
        eye_lid_b_l = 47,
        nose_pos_root = 48,
        nose = 49,
        mouth_up_pos_root = 50,
        mouth_up_root = 51,
        lip_ul = 52,
        lip_um_01 = 53,
        lip_um_02 = 54,
        lip_ur = 55,
        lip_l = 56,
        lip_r = 57,
        hair_root = 58,
        hair_b_01 = 59,
        hair_b_02 = 60,
        hair_l_01 = 61,
        hair_l_02 = 62,
        hair_r_01 = 63,
        hair_r_02 = 64,
        hair_f_02 = 65,
        hair_f_01 = 66,
        hair_b_pt_01 = 67,
        hair_b_pt_02 = 68,
        hair_b_pt_03 = 69,
        hair_b_pt_04 = 70,
        hair_b_pt_05 = 71,
        camera_fpp = 72,
        GunReferencePoint = 73,
        GunRef = 74,
        breast_l = 75,
        breast_r = 76,
        clavicle_l = 77,
        upperarm_l = 78,
        lowerarm_l = 79,
        hand_l = 80,
        thumb_01_l = 81,
        thumb_02_l = 82,
        thumb_03_l = 83,
        thumb_04_l_MBONLY = 84,
        index_01_l = 85,
        index_02_l = 86,
        index_03_l = 87,
        index_04_l_MBONLY = 88,
        middle_01_l = 89,
        middle_02_l = 90,
        middle_03_l = 91,
        middle_04_l_MBONLY = 92,
        ring_01_l = 93,
        ring_02_l = 94,
        ring_03_l = 95,
        ring_04_l_MBONLY = 96,
        pinky_01_l = 97,
        pinky_02_l = 98,
        pinky_03_l = 99,
        pinky_04_l_MBONLY = 100,
        item_l = 101,
        lowerarm_twist_01_l = 102,
        upperarm_twist_01_l = 103,
        clavicle_r = 104,
        upperarm_r = 105,
        lowerarm_r = 106,
        hand_r = 107,
        thumb_01_r = 108,
        thumb_02_r = 109,
        thumb_03_r = 110,
        thumb_04_r_MBONLY = 111,
        index_01_r = 112,
        index_02_r = 113,
        index_03_r = 114,
        index_04_r_MBONLY = 115,
        middle_01_r = 116,
        middle_02_r = 117,
        middle_03_r = 118,
        middle_04_r_MBONLY = 119,
        ring_01_r = 120,
        ring_02_r = 121,
        ring_03_r = 122,
        ring_04_r_MBONLY = 123,
        pinky_01_r = 124,
        pinky_02_r = 125,
        pinky_03_r = 126,
        pinky_04_r_MBONLY = 127,
        item_r = 128,
        lowerarm_twist_01_r = 129,
        upperarm_twist_01_r = 130,
        BackPack = 131,
        backpack_01 = 132,
        backpack_02 = 133,
        Slot_Primary = 134,
        Slot_Secondary = 135,
        Slot_Melee = 136,
        slot_throwable = 137,
        coat_l_01 = 138,
        coat_l_02 = 139,
        coat_l_03 = 140,
        coat_l_04 = 141,
        coat_fl_01 = 142,
        coat_fl_02 = 143,
        coat_fl_03 = 144,
        coat_fl_04 = 145,
        coat_b_01 = 146,
        coat_b_02 = 147,
        coat_b_03 = 148,
        coat_b_04 = 149,
        coat_r_01 = 150,
        coat_r_02 = 151,
        coat_r_03 = 152,
        coat_r_04 = 153,
        coat_fr_01 = 154,
        coat_fr_02 = 155,
        coat_fr_03 = 156,
        coat_fr_04 = 157,
        thigh_l = 158,
        calf_l = 159,
        foot_l = 160,
        ball_l = 161,
        calf_twist_01_l = 162,
        thigh_twist_01_l = 163,
        thigh_r = 164,
        calf_r = 165,
        foot_r = 166,
        ball_r = 167,
        calf_twist_01_r = 168,
        thigh_twist_01_r = 169,
        Slot_SideArm = 170,
        skirt_l_01 = 171,
        skirt_l_02 = 172,
        skirt_l_03 = 173,
        skirt_f_01 = 174,
        skirt_f_02 = 175,
        skirt_f_03 = 176,
        skirt_b_01 = 177,
        skirt_b_02 = 178,
        skirt_b_03 = 179,
        skirt_r_01 = 180,
        skirt_r_02 = 181,
        skirt_r_03 = 182,
        ik_hand_root = 183,
        ik_hand_gun = 184,
        ik_hand_r = 185,
        ik_hand_l = 186,
        ik_aim_root = 187,
        ik_aim_l = 188,
        ik_aim_r = 189,
        ik_foot_root = 190,
        ik_foot_l = 191,
        ik_foot_r = 192,
        camera_tpp = 193,
        ik_target_root = 194,
        ik_target_l = 195,
        ik_target_r = 196,
        VB_spine_03_spine_03 = 197,
        VB_upperarm_r_lowerarm_r = 198
    }
Объедините их в скелет. (каждый массив является частью, которая должна быть нарисована индивидуально)
Код:
Expand Collapse Copy
   static Bone[ ] skeletonUpper = new Bone[ ] {
            Bone.forehead, Bone.Head, Bone.neck_01,
        };
        static Bone[ ] skeletonRightArm = new Bone[ ] {
            Bone.neck_01, Bone.upperarm_r, Bone.lowerarm_r, Bone.hand_r
        };
        static Bone[ ] skeletonLeftArm = new Bone[ ] {
            Bone.neck_01, Bone.upperarm_l, Bone.lowerarm_l, Bone.hand_l
        };
        static Bone[ ] skeletonSpine = new Bone[ ] {
            Bone.neck_01, Bone.spine_01, Bone.spine_02, Bone.pelvis
        };
        static Bone[ ] skeletonLowerRight = new Bone[ ] {
            Bone.pelvis, Bone.thigh_r, Bone.calf_r, Bone.foot_r
        };
        static Bone[ ] skeletonLowerLeft = new Bone[ ] {
            Bone.pelvis, Bone.thigh_l, Bone.calf_l, Bone.foot_l
        };
        static Bone[ ][ ] skeleton = new Bone[ ][ ] {
            skeletonUpper, skeletonLeftArm, skeletonRightArm, skeletonSpine, skeletonLowerRight, skeletonLowerLeft
        };
И, наконец, провести линии между каждой костью..
[CÓDIGO] foreach (parte del hueso [] en el esqueleto)
{
Vector3 previousBone = nuevo Vector3 ();
foreach (hueso b en parte)
{
var currentBone = GetBoneWithRotation ((int) b, actor);

if (previousBone.X == 0) // primer hueso no ocurre empate
{
previousBone = currentBone;
Seguir;
}
más
{
// dibuja una línea desde previousBone a currentBone W2S
DrawLine3D (previousBone, currentBone);
previousBone = currentBone;
}
}
}[/CÓDIGO]
Tendrás algo como esto
5vK7pfK.png

[/CITAR]
ty
 
Назад
Сверху Снизу