【问题标题】:WPF models appear black with helix viewer 3d c#带有螺旋查看器 3d c# 的 WPF 模型显示为黑色
【发布时间】:2021-01-25 19:07:45
【问题描述】:

我是 WPF 和模型的新手,我想做一个可以打开各种 obj 文件并显示模型的界面。

此刻它们在视口中都显示为黑色,如下所示:

我不知道为什么,但我认为这是一个闪电问题,因为所有模型都有不同的位置,我不知道如何改变位置。 我认为它与它自己的 obj 无关,就像在 windows 的查看器中一样,它看起来是彩色的:

这是我的 xaml 部分:

<Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="1*"/>
            <ColumnDefinition Width="1*"/>
            <ColumnDefinition Width="2*"/>
        </Grid.ColumnDefinitions>

    <ListBox x:Name="Groupfiles" SelectionChanged="Groupfiles_Selected" Grid.Column="0"></ListBox>
    <StackPanel Grid.Column="1">
        <Button x:Name="ClickThebutton" Click="ClickThebutton_Click" >Click Me</Button>
    </StackPanel>
    <helix:HelixViewport3D x:Name="viewPort3d" ZoomExtentsWhenLoaded="true" Grid.Column="2" >
    </helix:HelixViewport3D>
</Grid>

这是c#部分:

ModelVisual3D device3D = new ModelVisual3D();
string file_to_open = null;
file_to_open = Groupfiles.SelectedItem.ToString();
string obj_file = Path.ChangeExtension(file_to_open, ".obj");
if (!File.Exists(obj_file))
{
     /// converts original file to obj file
}

device3D.Content = Display3d(obj_file);

viewPort3d.Children.Clear();
viewPort3d.Children.Add(device3D);
viewPort3d.ZoomExtents();

显示方法是这样的(来自我看到的helix3d教程):

public static 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;
}

我试图找到这个问题的答案,但无济于事。 你能帮帮我吗?

【问题讨论】:

    标签: c# wpf xaml 3d helix-3d-toolkit


    【解决方案1】:

    我没有看到您在代码中设置任何灯。

    【讨论】:

    • 我曾经在查看器端口内的 xaml 中有 ,但效果仍然相同。请指出如何正确地做到这一点?
    【解决方案2】:

    我通过在 zoomextents(); 之后添加这两行来解决我的问题

    ui.viewPort3d.Children.Remove(ui.defaultLights);
    ui.viewPort3d.Children.Add(ui.defaultLights);
    

    感谢所有花时间提供帮助的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-15
      相关资源
      最近更新 更多