c# wpf 3d rotation helix-3d-toolkit

c# - Helix toolkit Gire el modelo 3D



wpf rotation (1)

Soy nuevo en WPF y estoy tratando de hacer un programa que muestre un modelo 3D (que se guarda en mi computadora) y rotarlo en función de los clics del botón. Me gustaría tener tres botones para rotar el objeto sobre los ejes x, y y z. Tengo un código que mostrará el modelo, pero no estoy seguro de cómo rotarlo usando clics de botón. Esto es lo que tengo hasta ahora;

DO#

public MainWindow() { InitializeComponent(); ModelVisual3D device3D = new ModelVisual3D(); device3D.Content = Display3d(MODEL_PATH); // Add to view port viewPort3d.Children.Add(device3D); } private Model3D Display3d(string model) { Model3D device = null; try { //Adding a gesture here viewPort3d.RotateGesture = new MouseGesture(MouseAction.LeftClick); //Import 3D model file ModelImporter import = new ModelImporter(); //Load the 3D model file device = import.Load(model); } catch (Exception e) { // Handle exception in case can not find the 3D model file MessageBox.Show("Exception Error : " + e.StackTrace); } return device; } private void buttonX_Click(object sender, RoutedEventArgs e) { //not sure what to put in here }

XAML

<Grid Margin="0,0,6,94" RenderTransformOrigin="0.5,0.5"> <Grid.RenderTransform> <TransformGroup> <ScaleTransform/> <SkewTransform/> <RotateTransform Angle="-0.275"/> <TranslateTransform/> </TransformGroup> </Grid.RenderTransform> <helix:HelixViewport3D x:Name="viewPort3d" ZoomExtentsWhenLoaded="true" Margin="0,0,10,64" > <!-- Remember to add light to the scene --> <helix:DefaultLights/> <ModelVisual3D x:Name="Models"/> </helix:HelixViewport3D> <Rectangle Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="100" Margin="417,219,0,0" Stroke="Black" VerticalAlignment="Top" Width="100" RenderTransformOrigin="0.146,-0.196"/> <Button x:Name="buttonX" Content="ButtonX" HorizontalAlignment="Left" Height="30" Margin="216,356,0,-60" VerticalAlignment="Top" Width="104" Click="buttonX_Click"/> </Grid>

Actualmente estoy usando el kit de herramientas Helix, pero si hay una manera más fácil, házmelo saber.


A partir de la redacción de su pregunta, supongo que desea rotar el modelo y no la cámara, en cuyo caso guarde el device3D alguna parte y haga esto:

private void buttonX_Click(object sender, RoutedEventArgs e) { var axis = new Vector3D(0, 0, 1); var angle = 10; var matrix = device3D.Transform.Value; matrix.Rotate(new Quaternion(axis, angle)); device3D.Transform = new MatrixTransform3D(matrix); }