pyopengl全解析-7

pyopengl全解析-7

前言

还是找不到资料。。。。。。
还是,番外篇链接附上。
跟新速度会稍慢一些,因为我有项目要做,请各位看官不要着急哈~

开始

今天讲拾取

使用如下代码片即可。
其中用到的函数请参见:

pos = <pos>
world = <world>
max_dist = <max_dist>
def pick():
	global pos,world,max_dist
	_round = lambda x,y,z:(round(x),round(y),round(z))
	x,y,z = pos
	tx,ty,tz = target()
	bx,by,bz = tx - x,ty - y,tz - z
	dist = 0
	while(dist < max_dist and _round(x,y,z) not in world):
		x,y,z = x + bc,y + by,z + bz
	if(dist == max_dist):
		return (None,None,None)
	else:
		return _round(x,y,z)

其中,请替换:

  • <pos>:摄像机位置
  • <world>:世界中物体的位置,列表,格式为[(x1,y1,z1),(x2,y2,z2),...]
  • <max_dist>:最大拾取距离

另外,函数的返回值为拾取的位置,未拾取到返回(None,None,None)


由于没能找到资料,此处代码为拾取窗口正中央的方块,见图片方块拾取
如果认真读了这篇文章,应该能知道target函数是求在摄像机方向上,与摄像机距离为1的地方的坐标,所以我们就从摄像机位置 ( x , y , z ) (x,y,z) (x,y,z) ( x + n b x , y + n b y , z + n b z ) (x+nb_x,y+nb_y,z+nb_z) (x+nbx,y+nby,z+nbz)(其中 b x b_x bx b y b_y by b z b_z bztarget函数的结果减去摄像机位置)枚举,如果有物体,拾取成功,没有,失败。

上述代码适合坐标是整数的,可以通过给 b x b_x bx b y b_y by b z b_z bz乘一个合适的小数达到适应小数坐标的目的。

牢骚

全网没一个讲pyopengl拾取的。。。。。。真奇怪


作者

hit-road

拜拜,下课!
回到顶部

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值