WPF 3D - faire pivoter un modèle autour d'axes propres
Supposons que j'ai un simple WPF scène 3D mis en place avec un simple rectangle rotation de -45 degrés autour de l'axe X comme suit:
<Viewport3D>
<Viewport3D.Camera>
<PerspectiveCamera Position="0,0,4"/>
</Viewport3D.Camera>
<ModelVisual3D>
<ModelVisual3D.Content>
<DirectionalLight Color="White" Direction="-1,-1,-3" />
</ModelVisual3D.Content>
</ModelVisual3D>
<ModelVisual3D>
<ModelVisual3D.Content>
<GeometryModel3D>
<GeometryModel3D.Geometry>
<MeshGeometry3D Positions="-1,-1,0 1,-1,0 -1,1,0 1,1,0"
TriangleIndices="0,1,2 1,3,2"/>
</GeometryModel3D.Geometry>
<GeometryModel3D.Material>
<DiffuseMaterial Brush="Red"/>
</GeometryModel3D.Material>
</GeometryModel3D>
</ModelVisual3D.Content>
<ModelVisual3D.Transform>
<Transform3DGroup>
<RotateTransform3D>
<RotateTransform3D.Rotation>
<AxisAngleRotation3D Axis="1,0,0" Angle="-45"/>
</RotateTransform3D.Rotation>
</RotateTransform3D>
</Transform3DGroup>
</ModelVisual3D.Transform>
</ModelVisual3D>
</Viewport3D>
Cela me donne la suivante:
le texte d'alt http://www.freeimagehosting.net/uploads/4aa48434a9.png
Maintenant, je veux faire pivoter l'image de 45 degrés autour de la modèle de l'axe Z. Si je viens de mettre un deuxième RotateTransform3D dans comme suit:
<RotateTransform3D>
<RotateTransform3D.Rotation>
<AxisAngleRotation3D Axis="0,0,1" Angle="45"/>
</RotateTransform3D.Rotation>
</RotateTransform3D>
Il tourne autour de la de la scène de de l'axe Z. Pour ce type particulier de rotation X, j'ai travaillé sur ce dont j'ai besoin est:
<RotateTransform3D>
<RotateTransform3D.Rotation>
<AxisAngleRotation3D Axis="0,1,1" Angle="45"/>
</RotateTransform3D.Rotation>
</RotateTransform3D>
Mais voici mes maths me manque. Quelqu'un pourrait-il me dire comment faire ce travail pour un arbitraire de X (et Y si vous voulez) de la rotation?
Désolé, arbitraire angles X et Y de rotation.
Lien de l'Image est mort?
OriginalL'auteur Grokys | 2010-01-11
Vous devez vous connecter pour publier un commentaire.
Ok, a parlé à un ami mathématicien et il m'a donné la réponse:
Mise à JOUR: j'ai créé une fonction pour calculer une matrice qui va tourner un objet dans tous les 3 axes. Ceci peut être utilisé avec un MatrixTransform3D.
OriginalL'auteur Grokys
Ces pages sont également utiles:
http://www.kirupa.com/developer/actionscript/trig_multiple_axis.htm
http://blogs.msdn.com/mikepelton/archive/2004/10/29/249501.aspx
OriginalL'auteur Grokys