public static CreateFromRotationMatrix ( BEPUutilities.Matrix r ) : |
||
r | BEPUutilities.Matrix | Rotation matrix used to create a new quaternion. |
return |
/// <summary> /// Create a static physics mesh from a model and scale. /// </summary> /// <param name="entity"></param> private void AddStaticPhysics(BasicEntity entity) { BEPUutilities.Vector3[] vertices; int[] indices; ModelDataExtractor.GetVerticesAndIndicesFromModel(entity.Model, out vertices, out indices); var mesh = new StaticMesh(vertices, indices, new AffineTransform( new BEPUutilities.Vector3(entity.Scale.X, entity.Scale.Y, entity.Scale.Z), Quaternion.CreateFromRotationMatrix(MathConverter.Convert(entity.RotationMatrix)), MathConverter.Convert(entity.Position))); entity.StaticPhysicsObject = mesh; _physicsSpace.Add(mesh); }
public void ApplyTransformation() { if (_dynamicPhysicsObject == null) { //RotationMatrix = Matrix.CreateRotationX((float) AngleX)*Matrix.CreateRotationY((float) AngleY)* // Matrix.CreateRotationZ((float) AngleZ); Matrix scaleMatrix = Matrix.CreateScale(Scale); _worldOldMatrix = scaleMatrix * RotationMatrix * Matrix.CreateTranslation(Position); WorldTransform.Scale = Scale; WorldTransform.World = _worldOldMatrix; WorldTransform.InverseWorld = Matrix.Invert(Matrix.CreateTranslation(BoundingBoxOffset * Scale) * RotationMatrix * Matrix.CreateTranslation(Position)); if (StaticPhysicsObject != null && !GameSettings.e_enableeditor) { AffineTransform change = new AffineTransform( new BEPUutilities.Vector3(Scale.X, Scale.Y, Scale.Z), Quaternion.CreateFromRotationMatrix(MathConverter.Convert(RotationMatrix)), MathConverter.Convert(Position)); if (!MathConverter.Equals(change.Matrix, StaticPhysicsObject.WorldTransform.Matrix)) { //StaticPhysicsMatrix = MathConverter.Copy(Change.Matrix); StaticPhysicsObject.WorldTransform = change; } } } else { //Has something changed? WorldTransform.Scale = Scale; _worldOldMatrix = Extensions.CopyFromBepuMatrix(_worldOldMatrix, _dynamicPhysicsObject.WorldTransform); Matrix scaleMatrix = Matrix.CreateScale(Scale); //WorldOldMatrix = Matrix.CreateScale(Scale)*WorldOldMatrix; WorldTransform.World = scaleMatrix * _worldOldMatrix; WorldTransform.InverseWorld = Matrix.Invert(Matrix.CreateTranslation(BoundingBoxOffset * Scale) * RotationMatrix * Matrix.CreateTranslation(Position)); } }