2

我刚刚开始使用 Helix 3d。我想做的是创建一个球体并在它的轴上旋转它,在一些用户交互上,比如(在滑动时)或使用鼠标旋转它。

下面的代码有效,但我看不到任何使用的颜色。也有人可以解释为什么会这样吗?

我只是复制并粘贴了我在这里找到的代码!这是我得到的输出 输出图像

这是 C# MainWindow.XAML.cs 中的代码

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Media.Media3D;
    
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    using HelixToolkit;
    using HelixToolkit.Wpf;

namespace helixdemo1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        protected RotateManipulator r1Manip { get; set; }
        protected RotateManipulator r2Manip { get; set; }
        protected RotateManipulator r3Manip { get; set; }
        
        
        public MainWindow()
        {
            InitializeComponent();
            Create3DView();
        }

        private void Create3DView()
        {
            var builder = new MeshBuilder(true, true);
            var position = new Point3D(0, 0, 0);
            builder.AddSphere(position, 1,15,15);
           
            var geom = new GeometryModel3D(builder.ToMesh(), Materials.Brown);
            var visual = new ModelVisual3D();
            visual.Content = geom;
            
            r1Manip = new RotateManipulator();
            r1Manip.Color = Colors.Orange;
            r1Manip.Axis = new Vector3D(0, 0, 1);
            r1Manip.Diameter = 1;
            r1Manip.Bind(visual);

            r2Manip = new RotateManipulator();
            r2Manip.Color = Colors.Blue;
            r2Manip.Axis = new Vector3D(0, 1, 0);
            r2Manip.Diameter = 1;
            r2Manip.Bind(visual);

            r3Manip = new RotateManipulator();
            r3Manip.Color = Colors.Green;
            r3Manip.Axis = new Vector3D(1, 0, 0);
            r3Manip.Diameter = 1;
            r3Manip.Bind(visual);

            ModelArea.Children.Add(r1Manip);
            ModelArea.Children.Add(r2Manip);
            ModelArea.Children.Add(r3Manip);

            ModelArea.Children.Add(visual);
        }
        
    }
}

这是 XAML 代码

<Window x:Class="helixdemo1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:HelixToolkit="clr-namespace:HelixToolkit.Wpf;assembly=HelixToolkit.Wpf"        
        Title="MainWindow" Height="605" Width="597">

    <Grid>
        <Grid Width="300" Height="300" Margin="0,25,0,0" VerticalAlignment="Top" HorizontalAlignment="Center" >
            <HelixToolkit:HelixViewport3D x:Name="viewport"  ZoomExtentsWhenLoaded="True">
                <ModelVisual3D x:Name="ModelArea"></ModelVisual3D>
            </HelixToolkit:HelixViewport3D>
        </Grid>
    </Grid>
</Window>
4

1 回答 1

4

就颜色而言,您忘记为场景设置灯光:
没有灯光->黑色物体!
尝试这个:

    <Grid>
        <Grid Width="300" Height="300" Margin="0,25,0,0" VerticalAlignment="Top" HorizontalAlignment="Center" >
        <HelixToolkit:HelixViewport3D x:Name="viewport"  ZoomExtentsWhenLoaded="True">
            <HelixToolkit:DefaultLights/>
            <ModelVisual3D x:Name="ModelArea"></ModelVisual3D>
        </HelixToolkit:HelixViewport3D>
        </Grid>
    </Grid>

或者您可以在 .cs 文件中添加这一行(例如在 Create3DView() 的开头):

viewport.Children.Add(new DefaultLights());
于 2014-04-21T08:31:36.503 回答