问题标签 [viewport3d]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2844 浏览

c# - 具有正交相机剪裁的 Viewport3D

将 ViewPort3D 与正交相机一起使用时,3D 模型正在裁剪,如下面的第二个链接所示。就像视图基于透视相机并且不显示其背后的内容,即使它使用正交相机也是如此。

整个 3D 模型的视图

透视图和正交视图

使用代码生成上面的图片

关于如何解决这个问题的任何想法?

谢谢,

编辑:我实际上找到了解决方案,您只需将正交相机的 NearPlaneDistance 设置为 -Infinity,请参见下面的代码:

0 投票
0 回答
382 浏览

c# - 获取 ViewPort3d 的 3D 点

我需要获取 Kinect 给出的图像的一个点 (X,Y,Z) 的 3D 坐标。我解释得更好:我在 ViewPort3D 上有一个 3D 图像,我想接收我在 viewPort3D 上单击鼠标左键选择的一个点的 X、Y、Z 坐标。

现在我获得的只是鼠标位置相对于 viewPort3D 坐标的 X、Y 坐标,例如,如果我选择 viewPort3D 的中心,我会收到“60,60”(例如,viewPort3D 的尺寸为 120x120),但我想要让真实的 3D 坐标尊重我从 Kinect 收到的 3D 图像,例如可以是“43、23、80”。

我该怎么做?我在一个月内尝试了很多东西,但没有任何结果,只有相对于 viewPort3D 的坐标。

谢谢!

这是我从 Kinect 中看到的图像,我想用鼠标单击一个粉红色的点并获取该点的 X、Y、Z 坐标。

在此处输入图像描述

0 投票
1 回答
709 浏览

c# - 带有文本的 WPF 性能

我正在创建一个带有 Viewport3D 的 WPF 应用程序,并且在视口内我有带有文本的网格。每个网格的文本都不同。(这意味着我可以为常规网格的材质提供单一参考,但对于文本,我需要每次创建不同的材质。)我还冻结了所有常规网格,因为它们是静态的。

但是,我可以使用 SolidColorBrush 创建任意数量的网格,并且性能保持稳定。(我已经尝试了大约 700 - 800 个网格)

但是,如果我实现文本网格,性能会急剧下降。例如,当我有大约 200 个常规网格和 200 个文本网格时,性能非常糟糕。

我尝试了两种不同的方式来呈现文本;- 我尝试将文本渲染为 Viewport2DVisual3D。(但我认为这是一种糟糕的方式,因为这意味着在我之前的示例中,除了 Viewport3D 本身还有 200 个视口。) - 我尝试将文本渲染为 GeometryModel3D,因此创建与常规画笔相同。然而,材质由 VisualBrush 而不是 SolidColorBrush 组成。(这确实提高了相当多的性能,但仍然不完美)

有没有人有解决方案来进一步提高我渲染文本的性能,以便我可以渲染更多?

(我已经遵循以下站点上的大部分性能指南: https ://msdn.microsoft.com/en-us/library/bb613553%28v=vs.110%29.aspx )

@edit:我发现如果我使用视觉刷执行以下操作:

它确实大大提高了性能。我已经尝试过了,现在可以渲染 700 个常规网格和 300 个文本网格,而不会出现任何性能问题。使用 550 个文本网格和 550 个常规网格时,性能开始下降。

不过,我仍然想要任何其他建议。

0 投票
2 回答
955 浏览

c# - WPF InkCanvas 访问笔划下的所有像素

似乎 WPFInkCanvas只能提供笔画的点(与笔画的宽度和高度无关)。对于应用程序,我需要知道InkCanvas.

例如,假设笔画的宽度和高度为 16。使用这个笔画大小,我在InkCanvas. 有没有一种直接的方法来获得这个点中的所有 256 个像素(而不仅仅是这个巨大点的中心点)?

为什么我关心:
在我的应用程序中,用户使用 an在 显示几个 3D 对象InkCanvas的 a 上进行绘制。Viewport3D我想使用笔划的所有点来执行射线投射并确定其中哪些对象Viewport3D已被用户的笔划覆盖。

0 投票
1 回答
314 浏览

c# - WPF VisualTreeHelper.HitTest 使用多个线程

InkCanvas在我的应用程序中,对象顶部有一个透明的Viewport3D。显示Viewport3D了一个大型 3D 网格。用户将在 上绘制草图InkCanvas,以便选择Viewport3D正在渲染的 3D 模型的一部分。允许用户在InkCanvas.
当用户绘制草图时,我会遍历所有落在绘制圆内的点,并使用该VisualTreeHelper.HitTest函数执行光线投射并确定Viewport3D网格的哪些顶点与草图重合。

问题是VisualTreeHelper.HitTest速度非常慢。如果我使用 aParallel.For我仍然无法在 Viewport3D 上并行执行多个光线投射(由于Viewport3D对象的拥有线程是 UI 线程,我必须使用Viewport3D'Dispatcher.Invoke函数这将击败一开始的目的Parallel.For。)

有没有办法使用多个线程来加快速度?更好的是,是否有替代解决方案?

0 投票
1 回答
2894 浏览

c# - 如何在 WPF 中更改 ViewPort3D 背景颜色?

我有 viewport3d,我想改变它的背景颜色。

我对 Wpf 很陌生。我不明白从其他帖子中该怎么做。所以我在这里问。

我更改了 viewport3d 的画笔属性,但它什么也没做

0 投票
2 回答
2675 浏览

c# - 在 WPF Viewport3D 中可视化点云非常慢

我正在尝试使用 WPF 的 Viewport3D 控件可视化约 170000 点的点云。生成 3D 点坐标后,我在每个点创建一个具有特定大小的三角形,并将其添加到 Model3DGroup 对象,然后将其附加到我的视口。

我的问题是,下面负责此操作的代码仅需要 3 秒才能运行。将 Model3DGroup 添加到视口后,UI 将再冻结 3-5 秒。

我怎样才能使这项工作更快?此外,如果 Viewport3D 无法处理此数量的模型,任何人都可以推荐一种在 WPF 控件中可视化点云的替代方法吗?

0 投票
2 回答
1560 浏览

c# - 绘制鼠标点击的点

我正在使用 HelixToolkit 查看 STL 文件并与之交互。我需要在窗口上绘制或标记用户单击的点。我有坐标,我知道在哪里画那个点,但我不知道怎么画,有人可以帮我吗?我发布了一些代码来解释我现在所拥有的:

PD:我在 viewport3d 上显示 stl。

0 投票
1 回答
2258 浏览

c# - 如何在 WPF Viewport3d 中自动调整相机 LookDirection?

我使用 HelixToolKit 的 ModelImporter 函数向我的 Viewport3d 添加了一个模型(STL 文件),但首先什么都没有显示。要查看添加的 3DModel,我必须缩小。我的问题是,是否有任何方法可以动态/以编程方式将相机缩小或旋转到新添加的模型或任何需要立即显示它的东西。

我在项目中使用带有 C# WPF 的 helix 工具包。

0 投票
0 回答
47 浏览

c# - 如何渲染多个图像,一个在另一个之后,没有空格?

假设我有一张像:黑洞

我想让它在我的 Viewport3D 中看起来像一个圆柱体。

我正在做的是渲染图像 n 次,将我的网格的位置修改 n 次一个非常小的值。但即使这样做,我也可以清楚地看到切片。我可以尝试再次降低该值并渲染更多图像,但我认为我这样做的方式可能是错误的,这将花费大量时间来加载。

有什么建议吗?