Ich habe nun gemerkt, dass auch in meiner 3D Physic mit Bullet es zu einem Problem kommt. Es ist nämlich so, dass die Rotation nicht mit der Rotation von glm überein stimmt. Solange ich nur 1 Achse Rotiere, gibt es kein Problem. Sobald ich aber eine 2 dazu nehme, kommt es zu gravierenden abweichungen.
Hier ist meine GLM Rotation und die MVP Matrix dazu
Code: Alles auswählen
public static mat4 GetModelRotation(GameElement element)
{
Vec3 rotation = Utils.GetElementWorldRotation(element);
return mat4.RotateX(rotation.X) * mat4.RotateY(rotation.Y) * mat4.RotateZ(rotation.Z);
}
//// Dann im Renderen
mat4 mt_mat = Utils.GetModelTransformation(element);
mat4 mr_mat = Utils.GetModelRotation(element);
mat4 ms_mat = Utils.GetModelScale(element);
mat4 m_mat = mt_mat * mr_mat * ms_mat;
mat4 mvp = p_mat * v_mat * m_mat;
und hier der Bullet Code. Transformation und Scale Passsen, nur die Rotation mach Problemme
Code: Alles auswählen
public void UpdateRigidBody()
{
Vec3 location = Utils.GetElementWorldLocation(Parent);
Vec3 rotation = Utils.GetElementWorldRotation(Parent);
BulletSharp.Math.Matrix transform = BulletSharp.Math.Matrix.Translation(location.X, location.Y, location.Z);
BulletSharp.Math.Matrix rotMat = BulletSharp.Math.Matrix.RotationYawPitchRoll(rotation.Y, rotation.X, rotation.Z);/* BulletSharp.Math.Matrix.RotationX(rotation.X) * BulletSharp.Math.Matrix.RotationY(rotation.Y) * BulletSharp.Math.Matrix.RotationZ(rotation.Z);*/
this.RigidBody.MotionState = new DefaultMotionState(transform * rotMat);
Vec3 scale = Utils.GetElementWorldScale(this.Parent);
this.RigidBody.CollisionShape.LocalScaling = new Vector3(scale.X, scale.Y, scale.Z);
}
und hier der Fehler, es schaut so aus, als wäre die Rotation gespiegelt.