【发布时间】:2009-06-11 14:00:02
【问题描述】:
我必须修改一个用 C# 编写的 WPF 应用程序,该应用程序显示具有许多子模型或部件的复杂 3D 模型。当用户通过备用用户界面机制选择零件时,我想旋转、缩放或移动场景,以便子模型进入视野。没有子模型是完全隐藏的(即主模型的内部)。
最好的方法是什么?
作为进一步的信息,模型没有真正的顶部或底部。它是分子的 3D 表示,用户选择需要“滚动到视图中”的原子。
【问题讨论】:
我必须修改一个用 C# 编写的 WPF 应用程序,该应用程序显示具有许多子模型或部件的复杂 3D 模型。当用户通过备用用户界面机制选择零件时,我想旋转、缩放或移动场景,以便子模型进入视野。没有子模型是完全隐藏的(即主模型的内部)。
最好的方法是什么?
作为进一步的信息,模型没有真正的顶部或底部。它是分子的 3D 表示,用户选择需要“滚动到视图中”的原子。
【问题讨论】:
获取子模型包围体的中心(或质心)。旋转相机以查看中心。移动或缩放视图,直到子模型包围体占据屏幕的预定义部分。这涉及求解一个与观看体积和边界体积相关的简单线性方程。如果您的边界体积是最小边界框,这相当容易。
编辑
在这种情况下,如果您先进行一些谷歌搜索,可能会更好。您所说的特定功能通常称为“缩放以适应”。如果您进行一些谷歌搜索,我相信您会找到一些关于实现的深入讨论,这将比我在这里做得更好。解释要求您了解屏幕坐标和世界坐标之间的转换以及它们之间的关系等内容。
【讨论】: