wpf Helix 工具包旋转 3D 模型
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/36437858/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Helix toolkit Rotate 3D Model
提问by user3471066
I'm new to WPF and I'm trying to make a program that displays a 3d model (that is saved on my computer) and rotate it based on button clicks. I would like to have three buttons to rotate the object about the x, y, and z axes. I have code that will display the model but I am unsure how to rotate it using button clicks. Here is what I have so far;
我是 WPF 的新手,我正在尝试制作一个显示 3d 模型(保存在我的计算机上)并根据按钮点击旋转它的程序。我想要三个按钮来围绕 x、y 和 z 轴旋转对象。我有可以显示模型的代码,但我不确定如何使用按钮点击来旋转它。这是我到目前为止所拥有的;
C#
C#
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
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>
I'm currently using the Helix tool-kit but if there is an easier way, please let me know.
我目前正在使用 Helix 工具包,但如果有更简单的方法,请告诉我。
回答by Mark Feldman
From the wording of your question I'll assume you want to rotate the model and not the camera, in which case save device3Dsomewhere and do this:
根据您的问题的措辞,我假设您要旋转模型而不是相机,在这种情况下保存在device3D某处并执行以下操作:
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);
}

