diff --git a/samples/RenderDemo/Pages/Transform3DPage.axaml b/samples/RenderDemo/Pages/Transform3DPage.axaml
index ebd838eb67..e66c498bbc 100644
--- a/samples/RenderDemo/Pages/Transform3DPage.axaml
+++ b/samples/RenderDemo/Pages/Transform3DPage.axaml
@@ -54,12 +54,11 @@
+ CenterX="{Binding X}"
+ CenterY="{Binding Y}"
+ CenterZ="{Binding Z}" />
X-Rotation:
diff --git a/samples/RenderDemo/ViewModels/Transform3DPageViewModel.cs b/samples/RenderDemo/ViewModels/Transform3DPageViewModel.cs
index 7e7849bd01..d28705fc0d 100644
--- a/samples/RenderDemo/ViewModels/Transform3DPageViewModel.cs
+++ b/samples/RenderDemo/ViewModels/Transform3DPageViewModel.cs
@@ -6,7 +6,7 @@ namespace RenderDemo.ViewModels
{
public class Transform3DPageViewModel : ViewModelBase
{
- private double _roationX = 0;
+ private double _rotationX = 0;
private double _rotationY = 0;
private double _rotationZ = 0;
@@ -16,10 +16,10 @@ namespace RenderDemo.ViewModels
private double _depth = 200;
- public double RoationX
+ public double RotationX
{
- get => _roationX;
- set => RaiseAndSetIfChanged(ref _roationX, value);
+ get => _rotationX;
+ set => RaiseAndSetIfChanged(ref _rotationX, value);
}
public double RotationY
diff --git a/src/Avalonia.Visuals/Media/Transform3D.cs b/src/Avalonia.Visuals/Media/Transform3D.cs
index e063f76556..cfbde3204a 100644
--- a/src/Avalonia.Visuals/Media/Transform3D.cs
+++ b/src/Avalonia.Visuals/Media/Transform3D.cs
@@ -8,58 +8,41 @@ public class Transform3D : Transform
///
/// Defines the property.
///
- public static readonly StyledProperty s_rotationXProperty =
+ public static readonly StyledProperty RotationXProperty =
AvaloniaProperty.Register(nameof(RotationX));
///
/// Defines the property.
///
- public static readonly StyledProperty s_rotationYProperty =
+ public static readonly StyledProperty RotationYProperty =
AvaloniaProperty.Register(nameof(RotationY));
///
/// Defines the property.
///
- public static readonly StyledProperty s_rotationZProperty =
+ public static readonly StyledProperty RotationZProperty =
AvaloniaProperty.Register(nameof(RotationZ));
- ///
- /// Defines the property.
- ///
- public static readonly StyledProperty s_depthProperty =
- AvaloniaProperty.Register(nameof(Depth));
///
/// Defines the property.
///
- public static readonly StyledProperty s_centerXProperty =
+ public static readonly StyledProperty CenterXProperty =
AvaloniaProperty.Register(nameof(CenterX));
-
- ///
- /// Defines the property.
- ///
- public static readonly StyledProperty s_centerYProperty =
- AvaloniaProperty.Register(nameof(CenterY));
-
- ///
- /// Defines the property.
- ///
- public static readonly StyledProperty s_xProperty =
- AvaloniaProperty.Register(nameof(X));
///
/// Defines the property.
///
- public static readonly StyledProperty s_yProperty =
- AvaloniaProperty.Register(nameof(Y));
+ public static readonly StyledProperty CenterYProperty =
+ AvaloniaProperty.Register(nameof(CenterY));
///
- /// Defines the property.
+ /// Defines the property.
///
- public static readonly StyledProperty s_zProperty =
- AvaloniaProperty.Register(nameof(Z));
+ public static readonly StyledProperty CenterZProperty =
+ AvaloniaProperty.Register(nameof(CenterZ));
///
@@ -67,97 +50,93 @@ public class Transform3D : Transform
///
public Transform3D()
{
- this.GetObservable(s_rotationXProperty).Subscribe(_ => RaiseChanged());
- this.GetObservable(s_rotationYProperty).Subscribe(_ => RaiseChanged());
- this.GetObservable(s_rotationZProperty).Subscribe(_ => RaiseChanged());
- this.GetObservable(s_depthProperty).Subscribe(_ => RaiseChanged());
- this.GetObservable(s_centerXProperty).Subscribe(_ => RaiseChanged());
- this.GetObservable(s_centerYProperty).Subscribe(_ => RaiseChanged());
- this.GetObservable(s_xProperty).Subscribe(_ => RaiseChanged());
- this.GetObservable(s_yProperty).Subscribe(_ => RaiseChanged());
- this.GetObservable(s_zProperty).Subscribe(_ => RaiseChanged());
+ this.GetObservable(RotationXProperty).Subscribe(_ => RaiseChanged());
+ this.GetObservable(RotationYProperty).Subscribe(_ => RaiseChanged());
+ this.GetObservable(RotationZProperty).Subscribe(_ => RaiseChanged());
+ this.GetObservable(CenterXProperty).Subscribe(_ => RaiseChanged());
+ this.GetObservable(CenterYProperty).Subscribe(_ => RaiseChanged());
+ this.GetObservable(CenterXProperty).Subscribe(_ => RaiseChanged());
+ this.GetObservable(CenterYProperty).Subscribe(_ => RaiseChanged());
+ this.GetObservable(CenterZProperty).Subscribe(_ => RaiseChanged());
}
///
/// Initializes a new instance of the class.
///
- /// The skew angle of X-axis, in degrees.
- /// The skew angle of Y-axis, in degrees.
- ///
+ /// The rotation around the X-Axis
+ /// The rotation around the Y-Axis
+ /// The rotation around the Z-Axis
+ /// The origin of the X-Axis
+ /// The origin of the Y-Axis
+ /// The origin of the Z-Axis
public Transform3D(
double rotationX,
double rotationY,
double rotationZ,
- double depth,
- double centerX,
- double centerY) : this()
+ double originCenterX,
+ double originCenterY,
+ double originCenterZ) : this()
{
RotationX = rotationX;
RotationY = rotationY;
RotationZ = rotationZ;
- Depth = depth;
- CenterX = centerX;
- CenterY = centerY;
+ CenterX = originCenterX;
+ CenterY = originCenterY;
+ CenterZ = originCenterZ;
}
///
- /// Gets or sets the X property.
+ /// Sets the rotation around the X-Axis
///
public double RotationX
{
- get => GetValue(s_rotationXProperty);
- set => SetValue(s_rotationXProperty, value);
+ get => GetValue(RotationXProperty);
+ set => SetValue(RotationXProperty, value);
}
///
- /// Gets or sets the Y property.
+ /// Sets the rotation around the Y-Axis
///
public double RotationY
{
- get => GetValue(s_rotationYProperty);
- set => SetValue(s_rotationYProperty, value);
+ get => GetValue(RotationYProperty);
+ set => SetValue(RotationYProperty, value);
}
+ ///
+ /// Sets the rotation around the Z-Axis
+ ///
public double RotationZ
{
- get => GetValue(s_rotationZProperty);
- set => SetValue(s_rotationZProperty, value);
- }
-
- public double Depth
- {
- get => GetValue(s_depthProperty);
- set => SetValue(s_depthProperty, value);
+ get => GetValue(RotationZProperty);
+ set => SetValue(RotationZProperty, value);
}
+ ///
+ /// Moves the origin of the X-Axis
+ ///
public double CenterX
{
- get => GetValue(s_centerXProperty);
- set => SetValue(s_centerXProperty, value);
+ get => GetValue(CenterXProperty);
+ set => SetValue(CenterXProperty, value);
}
+ ///
+ /// Moves the origin of the Y-Axis
+ ///
public double CenterY
{
- get => GetValue(s_centerYProperty);
- set => SetValue(s_centerYProperty, value);
+ get => GetValue(CenterYProperty);
+ set => SetValue(CenterYProperty, value);
}
- public double X
- {
- get => GetValue(s_xProperty);
- set => SetValue(s_xProperty, value);
- }
-
- public double Y
- {
- get => GetValue(s_yProperty);
- set => SetValue(s_yProperty, value);
- }
-
- public double Z
+ ///
+ /// Moves the origin of the Z-Axis
+ ///
+ public double CenterZ
{
- get => GetValue(s_zProperty);
- set => SetValue(s_zProperty, value);
+ get => GetValue(CenterZProperty);
+ set => SetValue(CenterZProperty, value);
}
///
@@ -169,7 +148,7 @@ public class Transform3D : Transform
{
var matrix44 = Matrix4x4.Identity;
- matrix44 *= Matrix4x4.CreateTranslation((float)X, (float)Y, (float)Z);
+ matrix44 *= Matrix4x4.CreateTranslation(-(float)CenterX, -(float)CenterY, -(float)CenterZ);
matrix44 *= Matrix4x4.CreateRotationX((float)Matrix.ToRadians(RotationX));
matrix44 *= Matrix4x4.CreateRotationY((float)Matrix.ToRadians(RotationY));