- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
NeHeOpenGL第三十课:碰撞检测
NeHe OpenGL第三十课:碰撞检测 2010-08-23 22:19:20 标签: HYPERLINK /tagindex.php?keyword=NeHe \t _blank NeHe HYPERLINK /tagindex.php?keyword=OpenGL \t _blank OpenGL HYPERLINK /tagindex.php?keyword=%C5%F6%D7%B2%BC%EC%B2%E2 \t _blank 碰撞检测 原创作品,允许转载,转载时请务必以超链接形式标明文章 HYPERLINK /1130898/381874 \t _blank 原始出处 、作者信息和本声明。否则将追究法律责任。 HYPERLINK /1130898/381874 /1130898/381874 NeHe OpenGL第三十课:碰撞检测 碰撞检测: 这是一课激动的教程,你也许等待它多时了。你将学会碰撞剪裁,物理模拟太多的东西,慢慢期待吧。碰撞检测和物理模拟(作者:Dimitrios Christopoulos ( HYPERLINK mailto:christop@fhw.gr christop@fhw.gr)) 碰撞检测 这是一个我遇到的最困难的题目,因为它没有一个简单的解决办法.对于每一个程序都有一种检测碰撞的方法.当然这里有一种蛮力,它适用于各种不同的应用,当它非常的费时.我们将讲述一种算法,它非常的快,简单并易于扩展.下面我们来看看这个算法包含的内容: 1) 碰撞检测 移动的球-平面 移动的球-圆柱 移动的球-移动的球 2) 基于物理的建模 碰撞表示 应用重力加速度 3) 特殊效果 爆炸的表示,利用互交叉的公告板形式 声音使用Windows声音库 4) 关于代码 代码被分为以下5个部分 Lesson30.cpp : 主程序代码l Image.cpp, Image.h : 加载图像 Tmatrix.cpp, Tmatrix.h : 矩阵 Tray.cpp, Tray.h : 射线 Tvector.cpp, Tvector.h : 向量 1) 碰撞检测 我们使用射线来完成相关的算法,它的定义为: 射线上的点 = 射线的原点+ t * 射线的方向 t 用来描述它距离原点的位置,它的范围是[0, 无限远). 现在我们可以使用射线来计算它和平面以及圆柱的交点了。 射线和平面的碰撞检测: 平面被描述为: Xn dot X = d Xn 是平面的法线.X 是平面上的一个点.d 是平面到原点的距离. 现在我们得到射线和平面的两个方程: PointOnRay = Raystart + t * RaydirectionXn dot X = d 如果他们相交,则上诉方程组有解,如下所示: Xn dot PointOnRay = d (Xn dot Raystart) + t * (Xn dot Raydirection) = d 解得 t: t = (d - Xn dot Raystart) / (Xn dot Raydirection) t代表原点到与平面相交点的参数,把t带回原方程我们会得到与平面的碰撞点.如果Xn*Raydirection=0。则说明它与平面平行,则将不产生碰撞。如果t为负值,则说明交点在射线的相反方向,也不会产生碰撞。//判断是否和平面相交,是则返回1,否则返回0int TestIntersionPlane(const Plane plane,const TVector position,const TVector direction, double lamda, TVector pNormal){double DotProduct=direction.dot(plane._Normal);double l2; //判断是否平行于平面if ((DotProductZERO)(DotProduct-ZERO)) return 0; l2=(plane._Normal.dot(plane._Position-position))/DotProduct; if (l2-ZERO) return 0; pNormal=plane._Normal;lamda=l2;return 1;} 射线-圆柱的碰撞检测 计算射线和圆柱方程组得解。 int TestIntersionCylinder(const Cylinder cylinder,const TVector position,const TVector direction, double lamda, TVector p
文档评论(0)