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?

Ce arbitraires X et Y? Sont ces angles, les points, les autres?
Désolé, arbitraire angles X et Y de rotation.
Lien de l'Image est mort?

OriginalL'auteur Grokys | 2010-01-11