论文部分内容阅读
文章首先介绍了OpenGL中的鼠标拾取算法,详细讨论了算法中缓冲区数据的含义;并分析了OpenGL为什么没有按照拾取射线穿过物体的先后顺序来存储数据。在此基础上本文提出了一个三维环境下的鼠标拾取算法,将三维空间中点与物体相交的判断条件从三维降低到一维。该算法在三维空间中建立了一个实体光标,该光标可以在三维空间中自由移动。与普通的屏幕二维光标相比,该光标可以沿屏幕的纵深方向移动。该拾取算法认为只有光标热点进入物体内部时才能拾取到物体。文中设计了一个测量该算法精度的试验,经过分析简化了试验步骤。在实际应用中对算法的精度和易操作性做了权衡。因为算法的误差与光标纵深移动的步长有关,较小的步长使得光标移动缓慢、不便于操作;较大的步长却容易穿过物体,而无法选中物体,为此对算法做了改进。本文还介绍了如何操作三维的实体光标来拾取并移动物体。用户可以通过鼠标的移动、左右键的按下与抬起、滑轮的滚动来进行操作。为了达到较好的操作效果,还为用户提供了指向、接触、选择三个反馈状态。为了更好地应用本文提出的鼠标拾取算法,开发了可操作的三维虚拟环境。虚拟环境中包含场景对象和物体对象。文章阐述了场景类型的基本属性、操作、渲染方法、物体为何以及如何向场景注册;同时还讨论了场景中物体名字分配的方法及其优化。在虚拟场景中设计了门的模型以触发场景转换;电脑模型用来在虚拟场景中直接打开应用程序;为了让用户能够在虚拟三维场景中漫游,实现了摄像机模型,可以平移视点和旋转视角;同时,为了针对同一个物体进行不同的操作,还为场景和物体设计了三维右键弹出菜单。