c# - 表示为细长三角形的线在 3D 中不可见?

标签 c# wpf 3d

我正在尝试在 wpf 中绘制一条 3D 线,并且我有以下 xaml 代码:

<Grid>
    <Viewport3D x:Name="ViewerViewport"
                RenderOptions.BitmapScalingMode="HighQuality"
                Focusable="True" Grid.RowSpan="2">

        <ModelVisual3D x:Name="Model">

        </ModelVisual3D>

        <!-- Camera -->
        <Viewport3D.Camera>
            <PerspectiveCamera x:Name="Camera"
                               Position="0,0,0"
                               LookDirection="0,1,0"
                               UpDirection="0,0,1"
                               FieldOfView="100"
                               FarPlaneDistance="10"
                               NearPlaneDistance="0.1"/>
        </Viewport3D.Camera>

    </Viewport3D>

</Grid>

和这个 C# 代码:

public MainWindow()
{
        InitializeComponent();
        var ModelsGroup = new Model3DGroup();
         ModelsGroup.Children.Add(this.AddLine(new Point3D(0, 0, 100), new Point3D(0, 100, 100),"line 1)"));
         ModelsGroup.Children.Add(new AmbientLight(Colors.White));
        Model.Content = ModelsGroup;
}

和行创建代码:

  private Model3D AddLine(Point3D startPoint, Point3D EndPoint, string name)
    {
        SolidColorBrush brush = new SolidColorBrush(Colors.Black);
        var material = new DiffuseMaterial(brush);
        var mesh = new MeshGeometry3D();
        mesh.Positions.Add(startPoint);
        mesh.Positions.Add(EndPoint);
        mesh.TriangleIndices.Add(0);
        mesh.TriangleIndices.Add(1);
        mesh.TriangleIndices.Add(0);
        return new GeometryModel3D(mesh, material);
    }

但它没有在输出中显示任何行?

这是怎么回事?

我知道有一些 3d 库可以轻松做到这一点,但我喜欢学习如何在 WPF 中做到这一点,然后研究如何使用库(例如 helix3d)做到这一点

最佳答案

您正在创建一个两个角位于同一点的三角形,这是一个面积为零的三角形,因此从任何角度都看不到它。 WPF 仅使用带面积的三角形

要创建一条线,您必须根据线的长度和宽度制作一个矩形,然后用对角线将其分开以创建两个窄三角形。所以你需要四个位置和两个三角形,比如“0 1 2 0 1 3”。那么当然你必须确保这个矩形的方向是面向相机的。

您可以在 google 或 bing 上搜索 helix 工具箱,它是一个优秀的 WPF 3D 实用程序库。您可能会在那里找到有用的辅助函数。

关于c# - 表示为细长三角形的线在 3D 中不可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27705012/

相关文章:

c# - xmlns :dc mean in C# WPF? 是什么

c# - 用户是通过 UI 更改了该值,还是通过依赖属性更改了该值?

c# - 在内存中呈现 WPF 用户控件,而不是在屏幕上

xcode - Xcode 8 中的 "Always use Y-Up axis"去哪儿了?

actionscript-3 - 在我的 3D 旋转菜单中反转 y 轴 (as3)

3d - 推荐的游戏内角色模型 3D 模型类型,手动加载?

c# - 单独项目中 MVC 解决方案中的 Web API

c# - 如何找到 Culture 的默认日期格式

c# - 有序列化的优雅模式吗?

c# - 当应用程序在后台时在 Windows phone 8 中播放音频通知