diff --git a/CodeWalker.Core/GameFiles/Resources/Drawable.cs b/CodeWalker.Core/GameFiles/Resources/Drawable.cs index a3dca40..f1a7167 100644 --- a/CodeWalker.Core/GameFiles/Resources/Drawable.cs +++ b/CodeWalker.Core/GameFiles/Resources/Drawable.cs @@ -623,10 +623,10 @@ namespace CodeWalker.GameFiles var bone = Bones[i]; BonesMap[bone.Id] = bone; + bone.UpdateAnimTransform(); bone.BindTransformInv = (i < TransformationsInverted?.Length) ? TransformationsInverted[i] : Matrix.Invert(bone.AnimTransform); bone.BindTransformInv.M44 = 1.0f; - - bone.UpdateAnimTransform(); + bone.UpdateSkinTransform(); } } @@ -904,6 +904,9 @@ namespace CodeWalker.GameFiles } AnimTransform = Matrix.AffineTransformation(1.0f, ori, pos);//(global transform) AnimTransform.ScaleVector *= sca; + } + public void UpdateSkinTransform() + { SkinTransform = BindTransformInv * AnimTransform; //SkinTransform = Matrix.Identity;//(for testing) } diff --git a/Rendering/Renderable.cs b/Rendering/Renderable.cs index ef49ce8..40f9cba 100644 --- a/Rendering/Renderable.cs +++ b/Rendering/Renderable.cs @@ -477,7 +477,7 @@ namespace CodeWalker.Rendering { var bone = bones[i]; bone.UpdateAnimTransform(); - + bone.UpdateSkinTransform(); //update model's transform from animated bone RenderableModel bmodel = null; diff --git a/Rendering/Renderer.cs b/Rendering/Renderer.cs index 4747864..3c8b4e1 100644 --- a/Rendering/Renderer.cs +++ b/Rendering/Renderer.cs @@ -1119,6 +1119,8 @@ namespace CodeWalker.Rendering Skeleton skeleton = drawable?.Skeleton; if (skeleton == null) continue; + Vector3 campos = camera.Position - (entity?.Position ?? Vector3.Zero); + var pinds = skeleton.ParentIndices; var bones = skeleton.Bones; if ((pinds == null) || (bones == null)) continue; @@ -1145,8 +1147,7 @@ namespace CodeWalker.Rendering Vector3 lbeg = Vector3.Zero; Vector3 lend = bone.AnimTranslation;// bone.Rotation.Multiply(); - - float starsize = (bone.AnimTransform.TranslationVector-camera.Position).Length() * 0.011f; + float starsize = (bone.AnimTransform.TranslationVector-campos).Length() * 0.011f; Vector3[] starverts0 = { Vector3.UnitX * starsize, Vector3.UnitY * starsize, Vector3.UnitZ * starsize }; Vector3[] starverts1 = { Vector3.UnitX * -starsize, Vector3.UnitY * -starsize, Vector3.UnitZ * -starsize }; for (int j = 0; j < 3; j++) starverts0[j] = bone.AnimTransform.MultiplyW(starverts0[j]);