c# - Helix toolkit 旋转 3D 模型

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

我是 WPF 的新手,我正在尝试制作一个显示 3d 模型(保存在我的计算机上)并根据按钮点击旋转它的程序。我想要三个按钮来围绕 x、y 和 z 轴旋转对象。我有可以显示模型的代码,但我不确定如何使用按钮点击来旋转它。这是我目前所拥有的;

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

<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>

我目前正在使用 Helix 工具包,但如果有更简单的方法,请告诉我。

最佳答案

根据你问题的措辞,我假设你想旋转模型而不是相机,在这种情况下,将 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);
    }

关于c# - Helix toolkit 旋转 3D 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36437858/

相关文章:

c# - 复杂的ViewModel- View 无法根据需要的模型建议自动映射值。

c# - 当属性名称与类名称相同时,IntelliSense 不使用扩展方法

c# - 显示 Prism 模块内部的 Prism 模块

android - 想要在触摸事件中旋转 min3d 库的 3d 图像

c++ - Linux 3D 编程该走哪条路?

c# - IDL 中的返回值

c# - 部署带有数据库的 C# 程序以在 LAN 上工作的建议

c# - WPF Image using DataTrigger with Storyboard throwing 无法在不可变对象(immutable对象)实例上设置动画 '((RenderTransform).(RotateTransform.Angle)'

wpf - 在 DataGrid ItemsSource 更改后保持 Focus/SelectedItem

c++ - 如何在 C++ 中绘制 3d 散点图?