gdnative icon indicating copy to clipboard operation
gdnative copied to clipboard

Transform2D modifiers do not work as expected

Open rand0m-cloud opened this issue 3 years ago • 1 comments

These following test cases fail on gdnative = "0.10":

#[test]
fn test_godot_transform2d() {
    use std::f32::consts::PI;

    let position = Vector2::new(250.0, 150.0);
    let rotation = PI / 4.0;
    let transform = Transform2D::IDENTITY
        .translated(position)
        .rotated(rotation);

    let mut transform_2 = Transform2D::IDENTITY.translated(position);
    transform_2.set_rotation(rotation);

    assert_eq!(transform, transform_2);
}

#[test]
fn test_godot_transform2d_2() {
    use std::f32::consts::PI;

    let position = Vector2::new(250.0, 150.0);
    let rotation = PI / 4.0;
    let transform =
        Transform2D::from_rotation_translation_scale(position, rotation, Vector2::ONE);

    let mut transform_2 = Transform2D::IDENTITY.translated(position);
    transform_2.set_rotation(rotation);

    assert_eq!(transform, transform_2);
}
---- test_godot_transform2d_2 stdout ----
thread 'test_godot_transform2d_2' panicked at 'assertion failed: `(left == right)`
  left: `Transform2D { a: Vector2 { x: 0.7071068, y: 0.7071068 }, b: Vector2 { x: -0.7071068, y: 0.7071068 }, origin: Vector2 { x: 70.71068, y: 282.8427 } }`,
 right: `Transform2D { a: Vector2 { x: 0.7071068, y: 0.7071068 }, b: Vector2 { x: -0.7071068, y: 0.7071068 }, origin: Vector2 { x: 250.0, y: 150.0 } }`'

---- test_godot_transform2d stdout ----
thread 'test_godot_transform2d' panicked at 'assertion failed: `(left == right)`
  left: `Transform2D { a: Vector2 { x: 0.7071068, y: 0.7071068 }, b: Vector2 { x: -0.7071068, y: 0.7071068 }, origin: Vector2 { x: 70.71068, y: 282.8427 } }`,
 right: `Transform2D { a: Vector2 { x: 0.7071068, y: 0.7071068 }, b: Vector2 { x: -0.7071068, y: 0.7071068 }, origin: Vector2 { x: 250.0, y: 150.0 } }`'

I believe the matrix multiply is backwards in Transform2D::rotated. The function Transform2D::from_rotation_translation_scale also suffers from the above issue, and has a odd argument order for its name.

rand0m-cloud avatar Jul 30 '22 00:07 rand0m-cloud

EDIT: I was mistaken in my belief that xform_basis was not functioning correctly.

rand0m-cloud avatar Aug 20 '22 18:08 rand0m-cloud