游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2121|回复: 5

初学者对pick的一个想法

[复制链接]

201

主题

1437

帖子

1963

积分

金牌会员

Rank: 6Rank: 6

积分
1963
QQ
发表于 2005-6-21 19:21:00 | 显示全部楼层 |阅读模式
提示: 作者被禁止或删除 内容自动屏蔽

2

主题

177

帖子

177

积分

注册会员

Rank: 2

积分
177
发表于 2005-6-22 14:23:00 | 显示全部楼层

Re:初学者对pick的一个想法

呵呵……
最早的交互式程序都是用类似你说的stencil buffer的技巧这么进行PICK的
OpenGL红宝书里就有讲到。
虽然能精确到像素,但用在大规模场景里渲染起来不太方便,还是 ray pick 比较实用,而且灵活性高,比如可以指定选取时的鼠标距离容差,实现点和线一级图元的拾取。再进一步说,你的游戏里边总得有一些相交测试的包,比如射出去的子弹是否打到某物体,你只要直接拿来用在拾取里就可以了,可以统一在一个框架下。再使用包围盒包围体一类的东西可以得到很好的加速,而且游戏里一般能交互的东西都在主角的周围,这样只要检测主角附近一定范围内的物体就可以了,基本上不费什么时间。何必还要用一些 stencil buffer 之类的东西加一次渲染,加一次渲染肯定要关掉关照关掉纹理之类,图元传送+状态切换+渲染+从buffer中读取数据 的时间都够我ray pick几百几千个物体了。
所以基本上现在的交互式程序和有名的物理开发包都用 ray picking 做。

20

主题

473

帖子

502

积分

高级会员

Rank: 4

积分
502
发表于 2005-6-22 15:02:00 | 显示全部楼层

Re:初学者对pick的一个想法

看到你的帖子,我不禁想到了当年我在voodoo上作的pixel pick
不过我用的是color buffer, 因为现在大多数硬件上的stencilbuffer只有8位,不够用
用pixel pick的最大问题除了上面兄弟说的以外,还有一个就在于对于一根线上的多个物体的判断比较麻烦

201

主题

1437

帖子

1963

积分

金牌会员

Rank: 6Rank: 6

积分
1963
QQ
 楼主| 发表于 2005-6-23 13:06:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

2

主题

177

帖子

177

积分

注册会员

Rank: 2

积分
177
发表于 2005-6-23 17:05:00 | 显示全部楼层

Re:初学者对pick的一个想法

用八叉树之类层次化的方法来剔除掉大多数没有相交的物体,再加上包围盒来快速检测是否可能与某物体相交,一般的做到这一步就够了,你想要更精细级别的话就再按图元来检测

不过如果是用来做 pick 的话还是有点误差的好,鼠标大致移动到相应的位置就可以选中物体的话,玩家玩起来操作感也比较好
况且对大多数物体用包围盒(比如汽车)、包围圆柱(比如人)、包围球这些就已经可以获得很好的近似了,目前绝大多数物理引擎都差不多到这个精度吧,除了havok之类敢说自已在图元级别也可以得到实时的性能

201

主题

1437

帖子

1963

积分

金牌会员

Rank: 6Rank: 6

积分
1963
QQ
 楼主| 发表于 2005-6-24 13:29:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-27 07:58

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表