Beispiel #1
0
        // 指定した2つのボーンにフィットさせている剛体をジョイントする
        public void MakeJointFromTwoBones(int bone_num1, int bone_num2)
        {
            PMD_Joint joint = new PMD_Joint();

            joint.joint_name = bone_list[bone_num1].szName + "-" + bone_list[bone_num2].szName; // 諸データ:名称 // 右髪1
            joint.joint_rigidbody_a = GetBodyIDByName(bone_list[bone_num1].szName); // 諸データ:剛体A
            joint.joint_rigidbody_b = GetBodyIDByName(bone_list[bone_num2].szName); // 諸データ:剛体B
            joint.joint_pos.x = 0.5f * (bone_list[bone_num1].vec3Position.x + bone_list[bone_num2].vec3Position.x); // 諸データ:位置(x, y, z) // 諸データ:位置合せでも設定可
            joint.joint_pos.y = 0.5f * (bone_list[bone_num1].vec3Position.y + bone_list[bone_num2].vec3Position.y); // 諸データ:位置(x, y, z) // 諸データ:位置合せでも設定可
            joint.joint_pos.z = 0.5f * (bone_list[bone_num1].vec3Position.z + bone_list[bone_num2].vec3Position.z); // 諸データ:位置(x, y, z) // 諸データ:位置合せでも設定可
            joint.joint_rot.x = 0.0f; // 諸データ:回転(rad(x), rad(y), rad(z))
            joint.joint_rot.y = 0.0f; // 諸データ:回転(rad(x), rad(y), rad(z))
            joint.joint_rot.z = 0.0f; // 諸データ:回転(rad(x), rad(y), rad(z))
            joint.constrain_pos_1.x = -0.5f; // 制限:移動1(x, y, z)
            joint.constrain_pos_2.x = 0.5f; // 制限:移動2(x, y, z)
            joint.constrain_pos_1.y = -0.5f; // 制限:移動1(x, y, z)
            joint.constrain_pos_2.y = 0.5f; // 制限:移動2(x, y, z)
            joint.constrain_pos_1.z = -0.5f; // 制限:移動1(x, y, z)
            joint.constrain_pos_2.z = 0.5f; // 制限:移動2(x, y, z)
            joint.constrain_rot_1.x = (float)((-60.0 / 180.0) * Math.PI); // 制限:回転1(rad(x), rad(y), rad(z))
            joint.constrain_rot_2.x = (float)((60.0 / 180.0) * Math.PI); // 制限:回転2(rad(x), rad(y), rad(z))
            joint.constrain_rot_1.y = (float)((-60.0 / 180.0) * Math.PI); // 制限:回転1(rad(x), rad(y), rad(z))
            joint.constrain_rot_2.y = (float)((60.0 / 180.0) * Math.PI); // 制限:回転2(rad(x), rad(y), rad(z))
            joint.constrain_rot_1.z = (float)((-60.0 / 180.0) * Math.PI); // 制限:回転1(rad(x), rad(y), rad(z))
            joint.constrain_rot_2.z = (float)((60.0 / 180.0) * Math.PI); // 制限:回転2(rad(x), rad(y), rad(z))
            joint.spring_pos.x = 10.0f; // ばね:移動(x, y, z)
            joint.spring_pos.y = 10.0f; // ばね:移動(x, y, z)
            joint.spring_pos.z = 10.0f; // ばね:移動(x, y, z)
            joint.spring_rot.x = 10.0f; // ばね:回転(rad(x), rad(y), rad(z))
            joint.spring_rot.y = 10.0f; // ばね:回転(rad(x), rad(y), rad(z))
            joint.spring_rot.z = 10.0f; // ばね:回転(rad(x), rad(y), rad(z))

            joint_list.Add(joint);
        }
Beispiel #2
0
        // (指定したボーンにフィットさせた剛体)と、(その親ボーンにフィットさせた剛体)を、
        // 指定したボーンの位置でジョイントする
        public void MakeJointFromBone(int bone_num)
        {
            PMD_Joint joint = new PMD_Joint();

            joint.joint_name = GetBoneByName(bone_list[bone_num].ParentName).szName
                + "-" + bone_list[bone_num].szName; // 諸データ:名称 // 右髪1
            joint.joint_rigidbody_a = GetBodyIDByName(GetBoneByName(bone_list[bone_num].ParentName).szName); // 諸データ:剛体A
            joint.joint_rigidbody_b = GetBodyIDByName(bone_list[bone_num].szName); // 諸データ:剛体B
            joint.joint_pos.x = bone_list[bone_num].vec3Position.x; // 諸データ:位置(x, y, z) // 諸データ:位置合せでも設定可
            joint.joint_pos.y = bone_list[bone_num].vec3Position.y; // 諸データ:位置(x, y, z) // 諸データ:位置合せでも設定可
            joint.joint_pos.z = bone_list[bone_num].vec3Position.z; // 諸データ:位置(x, y, z) // 諸データ:位置合せでも設定可
            joint.joint_rot.x = 0.0f; // 諸データ:回転(rad(x), rad(y), rad(z))
            joint.joint_rot.y = 0.0f; // 諸データ:回転(rad(x), rad(y), rad(z))
            joint.joint_rot.z = 0.0f; // 諸データ:回転(rad(x), rad(y), rad(z))
            joint.constrain_pos_1.x = 0.0f; // 制限:移動1(x, y, z)
            joint.constrain_pos_2.x = 0.0f; // 制限:移動2(x, y, z)
            joint.constrain_pos_1.y = 0.0f; // 制限:移動1(x, y, z)
            joint.constrain_pos_2.y = 0.0f; // 制限:移動2(x, y, z)
            joint.constrain_pos_1.z = 0.0f; // 制限:移動1(x, y, z)
            joint.constrain_pos_2.z = 0.0f; // 制限:移動2(x, y, z)
            joint.constrain_rot_1.x = 0.0f; // 制限:回転1(rad(x), rad(y), rad(z))
            joint.constrain_rot_2.x = 0.0f; // 制限:回転2(rad(x), rad(y), rad(z))
            joint.constrain_rot_1.y = 0.0f; // 制限:回転1(rad(x), rad(y), rad(z))
            joint.constrain_rot_2.y = 0.0f; // 制限:回転2(rad(x), rad(y), rad(z))
            joint.constrain_rot_1.z = 0.0f; // 制限:回転1(rad(x), rad(y), rad(z))
            joint.constrain_rot_2.z = 0.0f; // 制限:回転2(rad(x), rad(y), rad(z))
            joint.spring_pos.x = 0.0f; // ばね:移動(x, y, z)
            joint.spring_pos.y = 0.0f; // ばね:移動(x, y, z)
            joint.spring_pos.z = 0.0f; // ばね:移動(x, y, z)
            joint.spring_rot.x = 0.0f; // ばね:回転(rad(x), rad(y), rad(z))
            joint.spring_rot.y = 0.0f; // ばね:回転(rad(x), rad(y), rad(z))
            joint.spring_rot.z = 0.0f; // ばね:回転(rad(x), rad(y), rad(z))

            joint_list.Add(joint);
        }
Beispiel #3
0
        // 指定した2つのボーンにフィットさせている剛体をジョイントする
        public void MakeJointFromTwoBones(int bone_num1, int bone_num2)
        {
            PMD_Joint joint = new PMD_Joint();

            // 諸データ:名称 // 右髪1
            joint.name    = nodes[bone_num1].name + "-" + nodes[bone_num2].name;
            joint.name_en = nodes[bone_num1].name_en + "-" + nodes[bone_num2].name_en;

            joint.rbody_a_id = GetBodyIDByName(nodes[bone_num1].name); // 諸データ:剛体A
            joint.rbody_b_id = GetBodyIDByName(nodes[bone_num2].name); // 諸データ:剛体B

            // 諸データ:位置(x, y, z) // 諸データ:位置合せでも設定可
            joint.position.X = 0.5f * (nodes[bone_num1].position.X + nodes[bone_num2].position.X);
            joint.position.Y = 0.5f * (nodes[bone_num1].position.Y + nodes[bone_num2].position.Y);
            joint.position.Z = 0.5f * (nodes[bone_num1].position.Z + nodes[bone_num2].position.Z);

            // 諸データ:回転(rad(x), rad(y), rad(z))
            joint.rotation = new Vector3(0.0f, 0.0f, 0.0f);

            // 制限:移動1(x, y, z)
            joint.position_min = new Vector3(-0.5f, -0.5f, -0.5f);

            // 制限:移動2(x, y, z)
            joint.position_max = new Vector3(+0.5f, +0.5f, +0.5f);

            // 制限:回転1(rad(x), rad(y), rad(z))
            joint.rotation_min.X = (float)((-60.0 / 180.0) * Math.PI);
            joint.rotation_min.Y = (float)((-60.0 / 180.0) * Math.PI);
            joint.rotation_min.Z = (float)((-60.0 / 180.0) * Math.PI);

            // 制限:回転2(rad(x), rad(y), rad(z))
            joint.rotation_max.X = (float)((60.0 / 180.0) * Math.PI);
            joint.rotation_max.Y = (float)((60.0 / 180.0) * Math.PI);
            joint.rotation_max.Z = (float)((60.0 / 180.0) * Math.PI);

            // ばね:移動(x, y, z)
            joint.spring_position = new Vector3(10.0f, 10.0f, 10.0f);
            // ばね:回転(rad(x), rad(y), rad(z))
            joint.spring_rotation = new Vector3(10.0f, 10.0f, 10.0f);

            joints.Add(joint);
        }
Beispiel #4
0
        // (指定したボーンにフィットさせた剛体)と、(その親ボーンにフィットさせた剛体)を、
        // 指定したボーンの位置でジョイントする
        public void MakeJointFromBone(int bone_num)
        {
            PMD_Joint joint = new PMD_Joint();

            joint.name = GetBoneByName(nodes[bone_num].ParentName).name
                         + "-" + nodes[bone_num].name;                                          // 諸データ:名称 // 右髪1

            joint.rbody_a_id = GetBodyIDByName(GetBoneByName(nodes[bone_num].ParentName).name); // 諸データ:剛体A
            joint.rbody_b_id = GetBodyIDByName(nodes[bone_num].name);                           // 諸データ:剛体B

            joint.position = nodes[bone_num].position;
            joint.rotation = Vector3.Empty;

            joint.position_min = Vector3.Empty;
            joint.position_max = Vector3.Empty;
            joint.rotation_min = Vector3.Empty;
            joint.rotation_max = Vector3.Empty;

            joint.spring_position = Vector3.Empty;
            joint.spring_rotation = Vector3.Empty;

            joints.Add(joint);
        }