发布网友 发布时间:2022-04-23 07:44
共1个回答
热心网友 时间:2022-06-17 21:15
在一个三维图形处理系统中,同一时刻屏幕上存在着多种对象(图形元素),如曲面、折线、点等。这些图形元素最初创建的形态不一定能满足要求,有时需要在系统提供的编辑环境下对这些图形元素做进一步的调整。比如移动折线中的某个关键点,使折线的形态达到令人满意的效果;同样,有时需要沿法向拖动曲面上的某个离散点,从而改变曲面的形态;所有这些编辑动作,都需要在选中某个图形元素后才能进行,因此,图形元素的选择就成为一个不可缺少的基本操作。
选择一个元素与对这个元素进行操作往往是紧密联系在一起的。比如当我们点击屏幕上的某个点时,其实就是在选择这个点,但这个点击操作同时也是拖动(编辑)这个点的开始,因此选择与编辑操作是交织在一起的。根据不同编辑操作的需要,我们将选择操作分为两种类型:静态选择和动态选择。
所谓静态选择是指只有当我们在某个图形元素之上点击了鼠标左键之后,这个点才被认为是选中了;动态选择是在鼠标移动过程中实现的,当鼠标移动到某个图形元素之上时,这个图形元素就被选中,网页中的动态链接就是使用了动态选择。在动态选择中,按下鼠标左键不再表示选择操作,而是表示编辑动作的开始。针对这两种类型的选择操作,我们分别给出了其实现机制。
在一个三维图形处理系统中,屏幕上显示的是三维空间中的物体,而屏幕本身却是二维的,鼠标指针的位置也是二维的。因此,我们需要解决一个问题:如何在二维世界中识别三维对象,OpenGL提供的选择机制为我们提供了解决这个问题的实现方法。
现在假设我们已能够从给定的对象集合中确定鼠标指针选中了哪个对象,框架平台中利用面向对象的多态性提供了对任意给定的对象集合的静态选择与动态选择实现,前提是集合中的每个对象都会“画出”自己。