上次我写了《通过读取Z Buffer深度值将屏幕2D坐标转化为场景3D坐标》,这个DEMO就是基于这篇文章的。比如我们想用鼠标依次选择一堆球中的2个小球用线将它们串连起来,怎么用OpenGL实现呢?
首先,在鼠标移动时将鼠标的屏幕坐标转化为3D场景坐标。然后,当第一次按下鼠标左键时,判断转化后的场景坐标是否在某个球体上,若在,则该球体被选中,将该坐标作为连线段的起点;当第2次按下鼠标左键时,同样判断转化后的场景坐标是否在某个球体上,若在,则该球体被选中,将该坐标作为连线段的终点。最后,画这条连线段。
本DEMO画了3个小球。当用鼠标左键选中小球时,小球会变为白色,选中2个球,会产生连线,而且两连接点就是鼠标在球体上点击的位置,十分精确。
操作说明:
←和→键:左右转动场景 ↑和↓键:前后移动场景
H键:查看帮助 ESC键:退出程序
下面是截图:
没选择连线时:
选择并连线后:
可执行程序和源代码下载: