private void StartBonePoseCalculation(MmdPose pose, double stepLength = 1 / 60.0f) { if (PhysicsMode != PhysicsModeEnum.Bullet || _model == null || _physicsReactor == null) { return; } _bonePosePreCalculator = new BonePosePreCalculator(pose, _poser, _physicsReactor, stepLength, 0.0, PhysicsCacheFrameSize, AutoPhysicsStepLength); _bonePosePreCalculator.Start(); }
private void SetPoseToPoser(MmdPose pose, Poser poser) { var nameToIndex = BuildBoneNameToIndexDictionary(poser.Model); foreach (var entry in pose.BonePoses) { var name = entry.Key; var bonePose = entry.Value; int index; if (!nameToIndex.TryGetValue(name, out index)) { continue; } poser.SetBonePose(index, bonePose); } }
private static bool ReadBonePose(TextReader reader, MmdPose ret) { var boneName = ReadBoneName(reader); if (boneName == null) { return(false); } var bonePosition = ReadBonePosition(reader); var boneQuaternion = ReadBoneQuaternion(reader); ReadBonePoseEnd(reader); ret.BonePoses.Add(boneName, new BonePose { Translation = bonePosition, Rotation = boneQuaternion }); return(true); }
public static MmdPose Read(string path) { var reader = new StreamReader(path, Tools.JapaneseEncoding); var ret = new MmdPose(); ReadMagic(reader); ret.ModelName = ReadModelName(reader); ReadBoneCount(reader); while (true) { if (!ReadBonePose(reader, ret)) { break; } } return(ret); }
public BonePosePreCalculator(MmdPose pose, Poser poser, BulletPyhsicsReactor physicsReactor, double stepLength, double startTimePos, int frameCacheSize, bool autoStepLength) { _poseMode = true; _poser = poser; _physicsReactor = physicsReactor; _stepLength = stepLength; _bonePoseImagesStore = new BlockingQueue <BonePoseFrame>(frameCacheSize); _timePos = startTimePos; _autoStepLength = autoStepLength; poser.ResetPosing(); SetPoseToPoser(pose, _poser); _poser.PrePhysicsPosing(); _physicsReactor.Reset(); _poser.PostPhysicsPosing(); var image = GetBonePoseImage(_poser); _bonePoseImagesStore.Enqueue(new BonePoseFrame(startTimePos, image)); }
public BonePosePreCalculator(BonePoseCalculatorWorker worker, MmdPose pose, Poser poser, BulletPyhsicsReactor physicsReactor, float stepLength, float startTimePos, int frameCacheSize, bool autoStepLength) { _poseMode = true; _poser = poser; _physicsReactor = physicsReactor; _stepLength = stepLength; _bonePoseImagesStore = new SynchronizedQueue <BonePoseFrame>(); _timePos = startTimePos; _autoStepLength = autoStepLength; _frameCacheSize = frameCacheSize; poser.ResetPosing(); SetPoseToPoser(pose, _poser); _poser.PrePhysicsPosing(); _physicsReactor.Reset(); _poser.PostPhysicsPosing(); var image = GetBonePoseImage(_poser); _bonePoseImagesStore.Enqueue(new BonePoseFrame(startTimePos, image)); _worker = worker; }
private void RestartBonePoseCalculation(MmdPose pose, double stepLength = 1 / 60.0f) { StopBonePoseCalculation(); StartBonePoseCalculation(pose, stepLength); }