嘿伙计们,我正在使用 wpf 3d,我目前正在编写一个程序,该程序将在屏幕上从左到右创建 3d 瓷砖,但我需要知道我在 X、Y 上的界限是什么,即 (-x-0) (0- x+) 所以我知道什么时候开始另一排瓷砖。我最初的想法是试图找出一种从像素到屏幕坐标的复杂算法,但似乎应该有一种更简单的方法。
问问题
1604 次
1 回答
3
如果我对您的理解正确,您想通过 Viewport3DVisual 找出可见的 3D 坐标范围。
这个问题没有单一的答案。要了解原因,请想象您正坐在厨房的餐桌旁吃早餐,碰巧透过窗户看。你能看到什么水平范围?好吧,您可以在远处看到大约 5 英里的那些蓝色山脉,但距离您的后栅栏只有 30 英尺。换言之,可视区域不是矩形棱柱,而是金字塔。
最重要的是,您必须先指定所涉及的距离,然后才能通过视口看到水平和垂直范围。
指定距离后,以下是如何将视口映射到给定平面上的 3D 点,而无需自己进行所有计算:
- 在单独的 Viewport3dVisual 中创建模型,使用相同的相机设置,但模型仅由所需距离处的单个大矩形组成。
- 使用命中测试来测试视口的每个角落,接收命中测试结果回调。
- 从命中测试结果中提取矩形上的坐标并将它们用于计算。
这种技术的优点是可以在相机可能面向的任何地方可靠地工作,甚至适用于动画相机等。
注意:如果我误解了这个问题,而您只是询问在 2D 中布置包含 3D 内容的瓷砖行,那么您只需使用 WrapPanel 即可获得您描述的效果。如果要进行数据绑定,请将 ItemsControl 或 ListBox 与 WrapPanel 的 ItemPanelTemplate 一起使用。
于 2009-12-27T06:24:18.260 回答