public override void LoadFromStream(BinaryReader br, MMDImportSettings importSettings) { this.NameJP = PMXParser.ReadString(br, importSettings.TextEncoding); this.NameEN = PMXParser.ReadString(br, importSettings.TextEncoding); byte flag = br.ReadByte(); //Ignored will be automatically generated on export. int refCount = br.ReadInt32(); for (int i = 0; i < refCount; i++) { byte refType = br.ReadByte(); switch (refType) { case PMXDisplaySlot.REF_IDENTIFY_BONE: int boneIndex = PMXParser.ReadIndex(br, importSettings.BitSettings.BoneIndexLength); this.References.Add(this.Model.Bones[boneIndex]); break; case PMXDisplaySlot.REF_IDENTIFY_MORPH: int morphIndex = PMXParser.ReadIndex(br, importSettings.BitSettings.MorphIndexLength); this.References.Add(this.Model.Morphs[morphIndex]); break; } } }
public override void LoadFromStream(BinaryReader br, MMDImportSettings importSettings) { int vtxIndex; if (importSettings.Format == MMDImportSettings.ModelFormat.PMX) { //PMX vtxIndex = PMXParser.ReadIndex(br, importSettings.BitSettings.VertexIndexLength); } else { //PMD vtxIndex = br.ReadInt32(); if (importSettings.BaseMorph != null) { if (vtxIndex < importSettings.BaseMorph.Offsets.Count) { PMXMorphOffsetVertex mov = (PMXMorphOffsetVertex)importSettings.BaseMorph.Offsets[vtxIndex]; vtxIndex = this.Model.Vertices.IndexOf(mov.Vertex); } } } this.Vertex = this.Model.Vertices[vtxIndex]; this.Translation = PMXVector3.LoadFromStreamStatic(br); }
public override void LoadFromStream(BinaryReader br, MMDImportSettings importSettings) { int mtIndex = PMXParser.ReadIndex(br, importSettings.BitSettings.MaterialIndexLength); if (mtIndex < 0) { this.Material = null; } else { this.Material = this.Model.Materials[mtIndex]; } this.Type = (MaterialMorphOffsetType)(int)br.ReadByte(); this.Diffuse = PMXColorRGBA.LoadFromStreamStatic(br); this.Specular = PMXColorRGBA.LoadFromStreamStatic(br); this.Ambient = PMXColorRGB.LoadFromStreamStatic(br); this.EdgeColor = PMXColorRGBA.LoadFromStreamStatic(br); this.EdgeSize = br.ReadSingle(); this.TextureFactor = PMXColorRGBA.LoadFromStreamStatic(br); this.SphereTextureFactor = PMXColorRGBA.LoadFromStreamStatic(br); this.ToonTextureFactor = PMXColorRGBA.LoadFromStreamStatic(br); }
public override void LoadFromStream(BinaryReader br, MMDImportSettings importSettings) { int linkCount; if (importSettings.Format == MMDImportSettings.ModelFormat.PMX) { //PMX IK this.boneTargetIndex = PMXParser.ReadIndex(br, importSettings.BitSettings.BoneIndexLength); this.Loop = br.ReadInt32(); this.RadianLimit = br.ReadSingle(); linkCount = br.ReadInt32(); } else { //PMD IK this.boneTargetIndex = br.ReadUInt16(); linkCount = (int)br.ReadByte(); this.Loop = br.ReadUInt16(); this.RadianLimit = br.ReadSingle(); } for (int i = 0; i < linkCount; i++) { PMXIKLink link = new PMXIKLink(this.Model, this); link.LoadFromStream(br, importSettings); this.IKLinks.Add(link); } }
public override void LoadFromStream(BinaryReader br, MMDImportSettings importSettings) { int boneIndex = PMXParser.ReadIndex(br, importSettings.BitSettings.BoneIndexLength); this.Bone = this.Model.Bones[boneIndex]; this.Translation = PMXVector3.LoadFromStreamStatic(br); this.Rotation = PMXQuaternion.LoadFromStreamStatic(br); }
public override void LoadFromStream(BinaryReader br, MMDImportSettings importSettings) { int vtxIndex = PMXParser.ReadIndex(br, importSettings.BitSettings.VertexIndexLength); this.Vertex = this.Model.Vertices[vtxIndex]; this.UVTranslation = PMXVector2.LoadFromStreamStatic(br); this.UVTranslation2 = PMXVector2.LoadFromStreamStatic(br); }
public override void LoadFromStream(BinaryReader br, MMDImportSettings importSettings) { this.bone1Index = PMXParser.ReadIndex(br, importSettings.BitSettings.BoneIndexLength); this.bone2Index = PMXParser.ReadIndex(br, importSettings.BitSettings.BoneIndexLength); this.bone3Index = PMXParser.ReadIndex(br, importSettings.BitSettings.BoneIndexLength); this.bone4Index = PMXParser.ReadIndex(br, importSettings.BitSettings.BoneIndexLength); this.Bone1Weight = br.ReadSingle(); this.Bone2Weight = br.ReadSingle(); this.Bone3Weight = br.ReadSingle(); this.Bone4Weight = br.ReadSingle(); }
public override void LoadFromStream(BinaryReader br, MMDImportSettings importSettings) { int boneIndex; if (importSettings.Format == MMDImportSettings.ModelFormat.PMX) { this.NameJP = PMXParser.ReadString(br, importSettings.TextEncoding); this.NameEN = PMXParser.ReadString(br, importSettings.TextEncoding); boneIndex = PMXParser.ReadIndex(br, importSettings.BitSettings.BoneIndexLength); } else { this.NameJP = PMDParser.ReadString(br, 20, importSettings.TextEncoding); this.NameEN = this.NameJP; boneIndex = br.ReadInt16(); } if (boneIndex < 0) { this.Bone = null; } else { this.Bone = this.Model.Bones[boneIndex]; } this.CollissionGroup = br.ReadByte(); this.NoCollissionGroups.LoadFromStream(br, importSettings); this.Shape = (BodyShape)(int)br.ReadByte(); this._shapeSize = PMXVector3.LoadFromStreamStatic(br); this.Position = PMXVector3.LoadFromStreamStatic(br); this.Rotation = PMXVector3.LoadFromStreamStatic(br); this.Mass = br.ReadSingle(); this.LinearDamping = br.ReadSingle(); this.AngularDamping = br.ReadSingle(); this.Repulsion = br.ReadSingle(); this.Friction = br.ReadSingle(); this.Type = (BodyType)(int)br.ReadByte(); if (importSettings.Format == MMDImportSettings.ModelFormat.PMD && this.Bone != null) { //PMD location fix this.Position += this.Bone.Position; } }
public override void LoadFromStream(BinaryReader br, MMDImportSettings importSettings) { if (importSettings.Format == MMDImportSettings.ModelFormat.PMX) { //PMX format this.boneIndex = PMXParser.ReadIndex(br, importSettings.BitSettings.BoneIndexLength); this.HasLimits = (br.ReadByte() == 1); if (this.HasLimits) { this.Minimum = PMXVector3.LoadFromStreamStatic(br); this.Maximum = PMXVector3.LoadFromStreamStatic(br); } } else { this.boneIndex = br.ReadUInt16(); } }
public override void LoadFromStream(BinaryReader br, MMDImportSettings importSettings) { int index1, index2, index3; if (importSettings.Format == MMDImportSettings.ModelFormat.PMX) { //PMX index1 = PMXParser.ReadIndex(br, importSettings.BitSettings.VertexIndexLength); index2 = PMXParser.ReadIndex(br, importSettings.BitSettings.VertexIndexLength); index3 = PMXParser.ReadIndex(br, importSettings.BitSettings.VertexIndexLength); } else { //PMD index1 = (int)br.ReadUInt16(); index2 = (int)br.ReadUInt16(); index3 = (int)br.ReadUInt16(); } this.Vertex1 = this.Model.Vertices[index1]; this.Vertex2 = this.Model.Vertices[index2]; this.Vertex3 = this.Model.Vertices[index3]; }
public override void LoadFromStream(BinaryReader br, MMDImportSettings importSettings) { int rigidBodyIndexA, rigidBodyIndexB; if (importSettings.Format == MMDImportSettings.ModelFormat.PMX) { this.NameJP = PMXParser.ReadString(br, importSettings.TextEncoding); this.NameEN = PMXParser.ReadString(br, importSettings.TextEncoding); this.Type = (JointType)(int)br.ReadByte(); rigidBodyIndexA = PMXParser.ReadIndex(br, importSettings.BitSettings.RigidBodyIndexLength); rigidBodyIndexB = PMXParser.ReadIndex(br, importSettings.BitSettings.RigidBodyIndexLength); } else { this.NameJP = PMDParser.ReadString(br, 20, importSettings.TextEncoding); this.NameEN = this.NameJP; this.Type = JointType.SpringSixDOF; rigidBodyIndexA = br.ReadInt32(); rigidBodyIndexB = br.ReadInt32(); } this.RigidBodyA = this.Model.RigidBodies[rigidBodyIndexA]; this.RigidBodyB = this.Model.RigidBodies[rigidBodyIndexB]; this.Position = PMXVector3.LoadFromStreamStatic(br); this.Rotation = PMXVector3.LoadFromStreamStatic(br); this.TranslationLimitMin = PMXVector3.LoadFromStreamStatic(br); this.TranslationLimitMax = PMXVector3.LoadFromStreamStatic(br); this.RotationLimitMin = PMXVector3.LoadFromStreamStatic(br); this.RotationLimitMax = PMXVector3.LoadFromStreamStatic(br); this.SpringConstantTranslation = PMXVector3.LoadFromStreamStatic(br); this.SpringConstantRotation = PMXVector3.LoadFromStreamStatic(br); }
public override void LoadFromStream(BinaryReader br, MMDImportSettings importSettings) { this.morphTargetIndex = PMXParser.ReadIndex(br, importSettings.BitSettings.MorphIndexLength); this.Strength = br.ReadSingle(); }
public void LoadFromStream(BinaryReader br, MMDImportSettings importSettings, out int pmdIKIndex) { pmdIKIndex = -1; if (importSettings.Format == MMDImportSettings.ModelFormat.PMX) { //PMX this.NameJP = PMXParser.ReadString(br, importSettings.TextEncoding); this.NameEN = PMXParser.ReadString(br, importSettings.TextEncoding); this.Position = PMXVector3.LoadFromStreamStatic(br); this.parentIndex = PMXParser.ReadIndex(br, importSettings.BitSettings.BoneIndexLength); this.Layer = br.ReadInt32(); short flags = br.ReadInt16(); this.HasChildBone = ((flags & PMXBone.BONE_TAILPOS_IS_BONE) != 0); if (this.HasChildBone) { this.childBoneIndex = PMXParser.ReadIndex(br, importSettings.BitSettings.BoneIndexLength); } else { this.ChildVector = PMXVector3.LoadFromStreamStatic(br); } this.Rotatable = ((flags & PMXBone.BONE_CAN_ROTATE) != 0); this.Translatable = ((flags & PMXBone.BONE_CAN_TRANSLATE) != 0); this.Visible = ((flags & PMXBone.BONE_IS_VISIBLE) != 0); this.Operating = ((flags & PMXBone.BONE_CAN_MANIPULATE) != 0); bool extRotation = ((flags & PMXBone.BONE_IS_EXTERNAL_ROTATION) != 0); bool extTranslation = ((flags & PMXBone.BONE_IS_EXTERNAL_TRANSLATION) != 0); int rotFlag = 0; if (extRotation) { rotFlag |= 1; } if (extTranslation) { rotFlag |= 2; } this.ExternalModificationType = (BoneExternalModificationType)rotFlag; if (this.ExternalModificationType != BoneExternalModificationType.None) { this.externalBoneIndex = PMXParser.ReadIndex(br, importSettings.BitSettings.BoneIndexLength); this.ExternalBoneEffect = br.ReadSingle(); } this.FixedAxis = ((flags & PMXBone.BONE_HAS_FIXED_AXIS) != 0); if (this.FixedAxis) { this.AxisLimit = PMXVector3.LoadFromStreamStatic(br); } this.LocalCoordinates = ((flags & PMXBone.BONE_HAS_LOCAL_COORDINATE) != 0); if (this.LocalCoordinates) { this.LocalCoordinatesX = PMXVector3.LoadFromStreamStatic(br); this.LocalCoordinatesZ = PMXVector3.LoadFromStreamStatic(br); } this.HasExternalParent = ((flags & PMXBone.BONE_IS_EXTERNAL_PARENT_DEFORM) != 0); if (this.HasExternalParent) { this.ExternalParentKey = br.ReadInt32(); } this.TransformPhysicsFirst = ((flags & PMXBone.BONE_IS_AFTER_PHYSICS_DEFORM) != 0); bool isIKBone = ((flags & PMXBone.BONE_IS_IK) != 0); if (isIKBone) { PMXIK ikData = new PMXIK(this.Model, this); ikData.LoadFromStream(br, importSettings); this.IK = ikData; } else { this.IK = null; } } else { //PMD this.NameJP = PMDParser.ReadString(br, 20, importSettings.TextEncoding); this.parentIndex = br.ReadInt16(); this.HasChildBone = true; this.childBoneIndex = br.ReadUInt16(); byte type = br.ReadByte(); ushort ikIndex = br.ReadUInt16(); this.Position = PMXVector3.LoadFromStreamStatic(br); switch (type) { case PMD_BONE_TYPE_ROTATE: //Default break; case PMD_BONE_TYPE_ROTATE_MOVE: this.Translatable = true; break; case PMD_BONE_TYPE_IK: //IK parameters will be initialised later this.Translatable = true; break; case PMD_BONE_TYPE_IK_CHILD: //PMX doesn't even bother about these break; case PMD_BONE_TYPE_EXTERNAL_ROTATOR: this.ExternalModificationType = BoneExternalModificationType.Rotation; this.externalBoneIndex = (int)ikIndex; break; case PMD_BONE_TYPE_IK_TARGET: //PMX doesn't bother either this.Visible = false; break; case PMD_BONE_TYPE_INVISIBLE: this.Visible = false; break; case PMD_BONE_TYPE_TWIST: //PMX handles these differently this._isPMDTwist = true; break; case PMD_BONE_TYPE_TWIST_INVISIBLE: //PMX handles these differently this._isPMDTwist = true; this.Visible = false; break; } } }
public override void LoadFromStream(BinaryReader br, MMDImportSettings importSettings) { this.bone1Index = PMXParser.ReadIndex(br, importSettings.BitSettings.BoneIndexLength); }
public void LoadFromStream(BinaryReader br, MMDImportSettings importSettings, string[] textures, List <PMXTriangle> triangles) { if (textures == null) { textures = new string[0]; } int triangleVerticesCount; if (importSettings.Format == MMDImportSettings.ModelFormat.PMX) { //PMX format this.NameJP = PMXParser.ReadString(br, importSettings.TextEncoding); this.NameEN = PMXParser.ReadString(br, importSettings.TextEncoding); this.Diffuse = PMXColorRGB.LoadFromStreamStatic(br); this.Alpha = br.ReadSingle(); this.Specular = PMXColorRGB.LoadFromStreamStatic(br); this.SpecularFactor = br.ReadSingle(); this.Ambient = PMXColorRGB.LoadFromStreamStatic(br); byte flags = br.ReadByte(); //Flag parsing //1st bit = double sided this.DoubleSided = ((flags & PMXMaterial.MATERIAL_DOUBLE_SIDED) != 0); //2nd bit = ground shadow this.GroundShadow = ((flags & PMXMaterial.MATERIAL_GROUND_SHADOW) != 0); //3rd bit - self shadow this.SelfShadow = ((flags & PMXMaterial.MATERIAL_SELF_SHADOW) != 0); //4th bit - self shadow+ this.SelfShadowPlus = ((flags & PMXMaterial.MATERIAL_SELF_SHADOW_PLUS) != 0); //5th bit - has edge line this.EdgeEnabled = ((flags & PMXMaterial.MATERIAL_EDGE_ENABLED) != 0); //6th bit - shine with vertex colour this.VertexColor = ((flags & PMXMaterial.MATERIAL_VERTEX_COLOR) != 0); //7th and 8bit - Tri, Point or Line shadow int shadowType = ((flags & 0xC0) >> 6); this.GroundShadowType = (PMXGroundShadowType)shadowType; this.EdgeColor = PMXColorRGBA.LoadFromStreamStatic(br); this.EdgeSize = br.ReadSingle(); int diffIndex = PMXParser.ReadIndex(br, importSettings.BitSettings.TextureIndexLength); this.DiffuseTexture = this.GetTextureFromIndex(diffIndex, textures); int sphereIndex = PMXParser.ReadIndex(br, importSettings.BitSettings.TextureIndexLength); this.SphereTexture = this.GetTextureFromIndex(sphereIndex, textures); this.SphereMode = (PMXSphereMode)(int)(br.ReadByte()); this.StandardToon = (br.ReadByte() == 1); if (this.StandardToon) { this.StandardToonIndex = br.ReadSByte(); } else { int toonTexIndex = PMXParser.ReadIndex(br, importSettings.BitSettings.TextureIndexLength); this.NonStandardToonTexture = this.GetTextureFromIndex(toonTexIndex, textures); } this.Comment = PMXParser.ReadString(br, importSettings.TextEncoding); triangleVerticesCount = br.ReadInt32(); } else { //PMD format this.Diffuse = PMXColorRGB.LoadFromStreamStatic(br); this.Alpha = br.ReadSingle(); this.SpecularFactor = br.ReadSingle(); this.Specular = PMXColorRGB.LoadFromStreamStatic(br); this.Ambient = PMXColorRGB.LoadFromStreamStatic(br); this._pmdToonIndex = br.ReadSByte(); byte flags = br.ReadByte(); this.EdgeEnabled = (flags == 1); this.GroundShadow = this.EdgeEnabled; triangleVerticesCount = br.ReadInt32(); string textureFile = PMDParser.ReadString(br, 20, importSettings.TextEncoding); if (textureFile != null) { string[] textureRefs = textureFile.Split(new char[] { '*' }, 2, StringSplitOptions.RemoveEmptyEntries); this.DiffuseTexture = textureRefs[0]; if (textureRefs.Length > 1) { this.SphereTexture = textureRefs[1]; } } } if (triangleVerticesCount % 3 != 0) { throw new InvalidDataException("Invalid triangle format!"); } if (triangles != null) { int triangleCount = triangleVerticesCount / 3; if (triangleCount > triangles.Count) { throw new InvalidDataException("Model doesn't have enough triangles!"); } this.Triangles = triangles.GetRange(0, triangleCount); triangles.RemoveRange(0, triangleCount); } }