Matrix3D Structure

Représente une matrice 4 × 4 utilisée pour les transformations dans un espace 3D.

Syntaxe


public struct Matrix3D


<Matrix3DM11 = "double"
  M12 = "double"
  M13 = "double"
  M14 = "double"
  M21 = "double"
  M22 = "double"
  M23 = "double"
  M24 = "double"
  M31 = "double"
  M32 = "double"
  M33 = "double"
  M34 = "double"
  OffsetX = "double"
  OffsetY = "double"
  OffsetZ = "double"
  M44 = "double"
 />


<object property="m11, m12, m13, m14, m21, m22, m23, m24, m31, m32, m33, m34, offsetX, offsetY, offsetZ, m44" />


Attributs

[Version(0x06020000)]
[WebHostHidden()]

Membres

Matrix3DStructure possède ces types de membres :

Constructeurs

Matrix3DStructure possède ces constructeurs.

ConstructeurDescription
Matrix3D Initializes a new instance of the Matrix3D class.

 

Champs

Matrix3DStructure possède ces champs.

ChampType de donnéesDescription
M11

System.Double [.NET] | float64 [C++]

Valeur de la première ligne et de la première colonne de cette structure Matrix3D.

M12

System.Double [.NET] | float64 [C++]

Valeur de la première ligne et de la deuxième colonne de cette structure Matrix3D.

M13

System.Double [.NET] | float64 [C++]

Valeur de la première ligne et de la troisième colonne de cette Matrix3D.

M14

System.Double [.NET] | float64 [C++]

Valeur de la première ligne et de la quatrième colonne de cette Matrix3D.

M21

System.Double [.NET] | float64 [C++]

Valeur de la seconde ligne et de la première colonne de cette Matrix3D.

M22

System.Double [.NET] | float64 [C++]

Valeur de la deuxième ligne et de la deuxième colonne de cette Matrix3D.

M23

System.Double [.NET] | float64 [C++]

Valeur de la deuxième ligne et de la troisième colonne de cette Matrix3D.

M24

System.Double [.NET] | float64 [C++]

Valeur de la deuxième ligne et de la quatrième colonne de cette Matrix3D.

M31

System.Double [.NET] | float64 [C++]

Valeur de la troisième ligne et de la première colonne de cette Matrix3D.

M32

System.Double [.NET] | float64 [C++]

Valeur de la troisième ligne et de la deuxième colonne de cette Matrix3D.

M33

System.Double [.NET] | float64 [C++]

Valeur de la troisième ligne et de la troisième colonne de cette Matrix3D.

M34

System.Double [.NET] | float64 [C++]

Valeur de la troisième ligne et de la quatrième colonne de cette Matrix3D.

M44

System.Double [.NET] | float64 [C++]

Valeur de la quatrième ligne et de la quatrième colonne de cette Matrix3D.

OffsetX

System.Double [.NET] | float64 [C++]

Valeur de la quatrième ligne et de la première colonne de cette Matrix3D.

OffsetY

System.Double [.NET] | float64 [C++]

Valeur de la quatrième ligne et de la deuxième colonne de cette Matrix3D.

OffsetZ

System.Double [.NET] | float64 [C++]

Valeur de la quatrième ligne et de la troisième colonne de cette Matrix3D.

 

Méthodes

The Matrix3D Structure a les méthodes suivantes. Elle hérite également des méthodes de Object Classe.

MéthodeDescription
Equals(Matrix3D) [C#, VB]Compares two Matrix3D structures for equality.
Equals(Object) [C#, VB]Determines whether the specified object is equal to a Matrix3D.
GetHashCode [C#, VB]Gets a hash code for this object.
Invert Inverts this Matrix3D structure.
ToString [C#, VB]Converts a Matrix3D to a String representation.
ToString(IFormatProvider) [C#, VB]Creates a String representation of this Matrix3D.

 

Opérateurs

Matrix3DStructure possède ces opérateurs.

OpérateurDescription
Equality Compares two Matrix3D structures for equality.
Inequality Compares two Matrix3D structures for inequality.
Multiply Multiplies the specified matrices.

 

Propriétés

Le Matrix3DStructure a les propriétés suivantes.

PropriétéType d'accèsDescription

HasInverse

En lecture seuleGets a value that indicates whether this Matrix3D is invertible.

Identity

En lecture seuleChanges a Matrix3D structure into an identity Matrix3D.

IsIdentity

En lecture seuleDetermines whether this Matrix3D structure is an identity Matrix3D.

M11

Lecture/écritureGets or sets the value of the first row and first column of this Matrix3D.

M11

Lecture/écritureGets or sets the value of the first row and first column of this Matrix3D.

M12

Lecture/écritureGets or sets the value of the first row and second column of this Matrix3D.

M13

Lecture/écritureGets or sets the value of the first row and third column of this Matrix3D.

M14

Lecture/écritureGets or sets the value of the first row and fourth column of this Matrix3D.

M21

Lecture/écritureGets or sets the value of the second row and first column of this Matrix3D.

M22

Lecture/écritureGets or sets the value of the second row and second column of this Matrix3D.

M23

Lecture/écritureGets or sets the value of the second row and third column of this Matrix3D.

M24

Lecture/écritureGets or sets the value of the second row and fourth column of this Matrix3D.

M31

Lecture/écritureGets or sets the value of the third row and first column of this Matrix3D.

M32

Lecture/écritureGets or sets the value of the third row and second column of this Matrix3D.

M33

Lecture/écritureGets or sets the value of the third row and third column of this Matrix3D.

M34

Lecture/écritureGets or sets the value of the third row and fourth column of this Matrix3D.

M44

Lecture/écritureGets or sets the value of the fourth row and fourth column of this Matrix3D.

OffsetX

Lecture/écritureGets or sets the value of the fourth row and first column of this Matrix3D.

OffsetY

Lecture/écritureGets or sets the value of the fourth row and second column of this Matrix3D.

OffsetZ

Lecture/écritureGets or sets the value of the fourth row and third column of this Matrix3D.

 

Remarques

Vous pouvez utiliser les types Matrix3DProjection et Matrix3D pour les scénarios de semi-3D plus complexes que ceux possibles avec le type PlaneProjection. Matrix3DProjection fournit un tableau de transformation 3D complet à appliquer à UIElement. La matrice vous permet d'appliquer les matrices de transformation de modèles arbitraires et les matrices de perspectives aux éléments visuels.

Matrix3D a la syntaxe de vecteur de ligne :

M11M12M13M14
M21M22M23M24
M31M32M33M34
OffsetXOffsetYOffsetZM44

 

Étant donné que la quatrième colonne est accessible, Matrix3D peut représenter les deux transformations affines et non affines.

Projection et membres de Matrix3D

Si vous utilisez un langage Microsoft .NET (C# ou Microsoft Visual Basic) ou les extensions de composants Visual C++ (C++/CX), Matrix3D possède des membres qui ne sont pas des données et ses membres de données sont exposés en tant que propriétés en lecture/écriture et non en tant que champs.

Si vous programmez en C++ à l'aide de la bibliothèque de modèles Windows Runtime (WRL), seuls les champs des données membres existent en tant que membres de Matrix3D, et vous ne pouvez pas utiliser les méthodes ou propriétés utilitaires répertoriées dans le tableau des membres. Le code WRL peut accéder aux méthodes utilitaires semblables qui existent dans la classe Matrix3DHelper.

Exemples

Cet exemple utilise une matrice Matrix3D simple pour transformer l'image selon les directions X et Y lorsque vous cliquez sur celle-ci.


<!-- When you click on the image, the projection is applied. -->
<Image PointerPressed="ApplyProjection" x:Name="BeachImage" Source="guy_by_the_beach.jpg"
       Width="200"/>



private void ApplyProjection(Object sender, PointerRoutedEventArgs e)
{
    Matrix3D m = new Matrix3D();

    // This matrix simply translates the image 100 pixels
    // down and 100 pixels right.
    m.M11 = 1.0; m.M12 = 0.0; m.M13 = 0.0; m.M14 = 0.0;
    m.M21 = 0.0; m.M22 = 1.0; m.M23 = 0.0; m.M24 = 0.0;
    m.M31 = 0.0; m.M32 = 0.0; m.M33 = 1.0; m.M34 = 0.0;
    m.OffsetX = 100; m.OffsetY = 100; m.OffsetZ = 0; m.M44 = 1.0;

    Matrix3DProjection m3dProjection = new Matrix3DProjection();
    m3dProjection.ProjectionMatrix = m;

    BeachImage.Projection = m3dProjection;

}


Vous pouvez également appliquer une Matrix3DProjection à un objet à l'aide de XAML. Cet exemple montre comment appliquer la même transformation que l'exemple précédent à l'aide de XAML plutôt que du code :


<Image Source="guy_by_the_beach.jpg">
    <Image.Projection>
        <Matrix3DProjection  ProjectionMatrix="2, 0, 0, 0,
                                              0, 2, 0, 0,
                                              0, 0, 1, 0,
                                              100, 100, 0, 1"/>
    </Image.Projection>
</Image>


Vous pouvez multiplier plusieurs matrices pour créer des effets plus complexes. Cet exemple utilise plusieurs matrices Matrix3D pour appliquer une transformation 3D à une image afin que l'effet 3D soit affiché lorsque vous cliquez sur l'image.


<!-- When you click on the image, the projection is applied. -->
<Image PointerPressed="ApplyProjection" x:Name="BeachImage" Source="guy_by_the_beach.jpg" 
       Width="200"/>



private void ApplyProjection(Object sender, PointerRoutedEventArgs e)
{
    // Translate the image along the negative Z-axis such that it occupies 50% of the
    // vertical field of view.
    double fovY = Math.PI / 2.0;
    double translationZ = -BeachImage.ActualHeight / Math.Tan(fovY / 2.0);
    double theta = 20.0 * Math.PI / 180.0;

    // You can create a 3D effect by creating a number of simple 
    // tranformation Matrix3D matrixes and then multiply them together.
    Matrix3D centerImageAtOrigin = TranslationTransform(
             -BeachImage.ActualWidth / 2.0,
             -BeachImage.ActualHeight / 2.0, 0);
    Matrix3D invertYAxis = CreateScaleTransform(1.0, -1.0, 1.0);
    Matrix3D rotateAboutY = RotateYTransform(theta);
    Matrix3D translateAwayFromCamera = TranslationTransform(0, 0, translationZ);
    Matrix3D perspective = PerspectiveTransformFovRH(fovY,
            LayoutRoot.ActualWidth / LayoutRoot.ActualHeight,   // aspect ratio
            1.0,                                                // near plane
            1000.0);                                            // far plane
    Matrix3D viewport = ViewportTransform(LayoutRoot.ActualWidth, LayoutRoot.ActualHeight);

    Matrix3D m = Matrix3DHelper.Multiply(centerImageAtOrigin,invertYAxis);
    m = Matrix3D.Multiply(m ,rotateAboutY);
    m = Matrix3D.Multiply(m,translateAwayFromCamera);
    m = Matrix3D.Multiply(m,perspective);
    m = Matrix3D.Multiply(m,viewport);

    Matrix3DProjection m3dProjection = new Matrix3DProjection();
    m3dProjection.ProjectionMatrix = m;

    BeachImage.Projection = m3dProjection;
}

private Matrix3D TranslationTransform(double tx, double ty, double tz)
{
    Matrix3D m = new Matrix3D();

    m.M11 = 1.0; m.M12 = 0.0; m.M13 = 0.0; m.M14 = 0.0;
    m.M21 = 0.0; m.M22 = 1.0; m.M23 = 0.0; m.M24 = 0.0;
    m.M31 = 0.0; m.M32 = 0.0; m.M33 = 1.0; m.M34 = 0.0;
    m.OffsetX = tx; m.OffsetY = ty; m.OffsetZ = tz; m.M44 = 1.0;

    return m;
}

private Matrix3D CreateScaleTransform(double sx, double sy, double sz)
{
    Matrix3D m = new Matrix3D();

    m.M11 = sx; m.M12 = 0.0; m.M13 = 0.0; m.M14 = 0.0;
    m.M21 = 0.0; m.M22 = sy; m.M23 = 0.0; m.M24 = 0.0;
    m.M31 = 0.0; m.M32 = 0.0; m.M33 = sz; m.M34 = 0.0;
    m.OffsetX = 0.0; m.OffsetY = 0.0; m.OffsetZ = 0.0; m.M44 = 1.0;

    return m;
}

private Matrix3D RotateYTransform(double theta)
{
    double sin = Math.Sin(theta);
    double cos = Math.Cos(theta);

    Matrix3D m = new Matrix3D();

    m.M11 = cos; m.M12 = 0.0; m.M13 = -sin; m.M14 = 0.0;
    m.M21 = 0.0; m.M22 = 1.0; m.M23 = 0.0; m.M24 = 0.0;
    m.M31 = sin; m.M32 = 0.0; m.M33 = cos; m.M34 = 0.0;
    m.OffsetX = 0.0; m.OffsetY = 0.0; m.OffsetZ = 0.0; m.M44 = 1.0;

    return m;
}

private Matrix3D RotateZTransform(double theta)
{
    double cos = Math.Cos(theta);
    double sin = Math.Sin(theta);

    Matrix3D m = new Matrix3D();
    m.M11 = cos; m.M12 = sin; m.M13 = 0.0; m.M14 = 0.0;
    m.M21 = -sin; m.M22 = cos; m.M23 = 0.0; m.M24 = 0.0;
    m.M31 = 0.0; m.M32 = 0.0; m.M33 = 1.0; m.M34 = 0.0;
    m.OffsetX = 0.0; m.OffsetY = 0.0; m.OffsetZ = 0.0; m.M44 = 1.0;
    return m;
}

private Matrix3D PerspectiveTransformFovRH(double fieldOfViewY, double aspectRatio, double zNearPlane, double zFarPlane)
{
    double height = 1.0 / Math.Tan(fieldOfViewY / 2.0);
    double width = height / aspectRatio;
    double d = zNearPlane - zFarPlane;

    Matrix3D m = new Matrix3D();
    m.M11 = width; m.M12 = 0; m.M13 = 0; m.M14 = 0;
    m.M21 = 0; m.M22 = height; m.M23 = 0; m.M24 = 0;
    m.M31 = 0; m.M32 = 0; m.M33 = zFarPlane / d; m.M34 = -1;
    m.OffsetX = 0; m.OffsetY = 0; m.OffsetZ = zNearPlane * zFarPlane / d; m.M44 = 0;

    return m;
}

private Matrix3D ViewportTransform(double width, double height)
{
    Matrix3D m = new Matrix3D();

    m.M11 = width / 2.0; m.M12 = 0.0; m.M13 = 0.0; m.M14 = 0.0;
    m.M21 = 0.0; m.M22 = -height / 2.0; m.M23 = 0.0; m.M24 = 0.0;
    m.M31 = 0.0; m.M32 = 0.0; m.M33 = 1.0; m.M34 = 0.0;
    m.OffsetX = width / 2.0; m.OffsetY = height / 2.0; m.OffsetZ = 0.0; m.M44 = 1.0;

    return m;
}


Conditions requises

Client minimal pris en charge

Windows 8

Serveur minimal pris en charge

Windows Server 2012

Espace de noms

Windows.UI.Xaml.Media.Media3D
Windows::UI::Xaml::Media::Media3D [C++]

Métadonnées

Windows.winmd
Platform.winmd

Assembly

System.Runtime.WindowsRuntime.UI.Xaml.dll

Voir aussi

Matrix3DHelper

 

 

Afficher:
© 2015 Microsoft