cesium drillPick实现原理

首先谈谈webgl的pick实现原理:即给每一个渲染的物体绑定一个唯一的id,在内存中这个是很容易做到,但是GPU只有渲染的图像,没有像内存一样的东西(这也是为何调试shader只能通过颜色来判断)

因此要绑定这个id,则需要用相应的颜色来记录这个id,颜色的表示方法为rgba(1,1,1,1),每个分量的取值范围为0-255,因此cesium可记录的最大的pickid entity限制为256*256*256*256 =2的32次方,刚好是一个Uint32的记录长度。_nextPickColor会依次递增,当超出最大时候,会抛出异常

cesium渲染时,会将该帧渲染到一个pickframebuffer中,pickframebuffer仅记录id信息,不会渲染到屏幕上,当点击时,可通过webgl自带的context.readPixels()函数将点击位置的像素返回

这样就可以拿到id,将对应id的primitive/3D tiles返回,此时 即完成了pick操作;

上述操作只能做一次pick,dirllPick可以返回在射线上的所有物体,

drill pick 调用堆栈

cesium中是依次将在射线上的primitive隐藏再渲染,直到相交的物体为空或者达到限定的数目(limit)再停止,

 

 

当pick完成之后,重新进行渲染。

 

note:测试的时候发现,drillPick在一定条件下会不正确,留待以后探索,如下图,正常至少返回3个,但实际上只返回了一个

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值