我正在尝试在 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/