计算几何实践2.2:3D窗口的拾取操作

2018-02-25

  在三维CAD 软件和3D游戏中,都有目标的拣选操作。通常有两种方式来实现这个功能:一是通过手工计算从屏幕发出的射线与场景内的物体求交,二是使用Vulkan/OpenGL的拾取机制(Selection Mode)。 即使是自己实现三维选择操作,也有多种方式。
  简单的拾取操作分为两类:点选和框选。点选非常简单,就是求解一条射线和场景内物体的相交。框选则需要按照投影模式分一下:平行投影模式下视景体是长方体,透视投影模式下视景体是一个平截头体(frustum)。两者的计算难度则相差较大。这些计算,本质上都是碰撞检测,和游戏中子弹射出后击中物体所需要的计算原理是相同的。
  点选时,我们需要根据相机的position和近平面上被选择的点构造一条射线。我们原来的项目中,试图把这条射线构造为一个很细的长方体,以图以此解决点选时可允许误差问题。事实证明这种方式行不通。还是简单的采用第三方lib。
  框选时,我们需构造cuboid或frustum来对场景中已有的triangle、cuboid、sphere或任意形状的物体做相交检测。这里必须要对已有的物体做包围盒了,包围盒能减少一两个数量级的计算量。如果物体没有旋转,采用最简单的OBB即可。用上lib,我们很快就能完成开发任务。
  我推荐的一个C++算法lib是 Geometric Tools,其作者也是Geometric Tools for Computer Graphics一书的作者。代码接口很简单明了。
  关于OpenGL/Vulkan拾取,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值