在3D图形处理中,裁剪平面是一个重要的概念,它可以用来“切割”模型,从而移除模型的一部分。在本文中,将探讨有限裁剪平面的实现方式,以及如何使用Microsoft的3D工具库来增强模型的可视化效果。
有限裁剪平面与无限裁剪平面的主要区别在于,它只移除那些中心点投影位于有限裁剪平面上(以及其后方)的矩形。为了实现这一功能,引入了一个名为IsPointOnPlane(Point3D point)
的方法,该方法通过判断给定点的投影是否位于由两个三角形定义的平面上来返回布尔值。这一算法的细节由Håkon Hægland提供。利用IsPointOnPlane
方法,可以忽略那些“位于”有限裁剪平面之外的矩形,对于剩余的矩形,计算它们与平面的距离,并将距离小于零(即位于不透明蓝色一侧后方)的矩形移除。
Microsoft的3D工具库允许使用鼠标来旋转和缩放模型。按住鼠标左键并移动鼠标可以旋转模型;按住鼠标右键并上下移动可以缩放模型。遗憾的是,该库似乎没有提供撤销鼠标操作的功能,也就是说,没有“重置”功能。为了解决这个问题,修改了OnMouseDown
事件处理器,使其能够检测到在3D视图窗口的左上角点击鼠标以撤销旋转和缩放,从而重置模型。按下Esc键可以重置使用箭头键设置的相机移动。
由于3D工具库允许非常快速地进行旋转和缩放,因此很容易失去方向感。为了帮助保持空间意识,添加了一个DrawBackground()
方法,该方法创建了一个由四面墙、地板和天花板组成的盒子。墙壁上标有北、南、东和西。六个背景矩形使用纹理,因此使用了六个图像文件。如第一部分所述,您需要修改app.config以指向图像文件,例如:
<setting name="ImageFileLocation" serializeAs="String">
<value>C:\MyProjects\MengerSponge\MengerSpongeClipping\MengerSpongeClipping\Images\</value>
</setting>
默认情况下,背景是关闭的,但可以使用背景切换键来开启或关闭,如下图所示,已经放大并打开了背景:
下载MengerSpongeClipping.zip
文件并解压。使用Visual Studio打开MengerSpongeClipping解决方案。它由两个项目组成:MengerSpongeClipping WPF应用程序和Microsoft 3D工具库。按照下文描述修改app.config以指向图像文件。按下F6构建解决方案;它应该能够成功构建,没有错误。按下F5以调试模式运行MengerSpongeClipping项目。
要裁剪Menger海绵,只需单击“裁剪”按钮。您可以使用滑块定位裁剪平面,如上图所示。您可以使用“旋转平面”滑块围绕x、y或z轴旋转裁剪平面,并且可以使用“平移平面”滑块沿x、y或z轴平移它。在版本2中,默认情况下,裁剪平面被假定为在所有方向上都是无限的,但当您按下“I”键(无限裁剪平面切换)时,裁剪平面的前景和背景颜色会变浅,并且会绘制一个黑色边框(见AddBorder()
),以提供视觉提示,表明平面是有限的,如上图所示。此外,裁剪平面的X和Y“拉伸”滑块被启用,允许您拉伸或缩小平面。当您使用有限裁剪平面裁剪海绵时,只有那些中心点投影到平面上(并且位于其后方)的矩形被移除。您还可以使用“视图”菜单选择有限或无限裁剪平面。