小编Sve*_*rre的帖子

WPF:查找部分位于2D矩形内的3D视觉效果

我正在制作一个WPF程序,可以在3D中以图形方式修改数据.为了给用户提供同时选择多个图形对象的选项,我想实现一个选择矩形.(就像在Windows资源管理器中一样.)像这样的程序中的一个常见功能是为选择矩形提供2个不同的功能,并且用户可以某种方式选择应该使用哪种方法.

  1. 选择部分或完全位于矩形内的任何对象.
  2. 仅选择完全位于矩形内的对象.

第二种方法是直接使用每个对象的边界框,并检查它是否在矩形内.另一方面,第一个似乎是相当一些工作.我的所有图形对象都是复杂的3D图形,并且可以由用户以任何方式旋转.目前我无法找到任何其他方法,除了检查任何对象的网格中的任何三角形是否穿过我的2D矩形,这可能非常耗时.

我对WPF 3D没什么经验,但我之前在OpenGL中做过这个.然后我可以告诉OpenGL绘制屏幕的特定区域,并收集在特定区域中可见的对象列表.我需要获得我想要的功能大约是5行代码.

我想我的问题是:

  1. 有没有办法用WPF 3D做这个,类似于OpenGL方法?
  2. 如果没有,是否还有其他智能方法可以在视口中找到部分位于2D矩形后面的所有对象(Visual3D)?

我拒绝相信我是唯一一个有这种问题的人,所以我希望一个聪明的头脑可以指引我朝着正确的方向前进.

此致,Sverre


谢谢您的回答!

2D矩形就在摄像机前方,无限向前延伸.我想得到任何部分或完全在平截头体内的物体.

我们使用的相机是正交投影或透视投影相机(System.Windows.Media.Media3D.ProjectionCamera).我们不使用矩阵相机的原因是我们使用的是不支持矩阵相机的第三方工具.但我相信有一种方法可以从投影相机中获取矩阵,所以希望不是问题所在.

从理论上讲,您的解决方案听起来就像我们需要的那样,但我不确定如何继续.你有任何示例代码的链接,或者你能提供一些关于如何实际实现这一点的提示吗?

顺便说一句:由于我们正在使用WPF,因此我们无法直接访问DirectX.至少这是我们在一些研究后得出的结论.你提到使用z-buffer,我们无法通过WPF访问它.如果你知道一种访问z-buffer的方法,我们非常感谢!这是主题,但我们一直在努力禁用z缓冲区,但已放弃......

最好的问候,Sverre

c# wpf

6
推荐指数
1
解决办法
784
查看次数

标签 统计

c# ×1

wpf ×1