游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1840|回复: 3

如何在D3D中进行简单的碰撞测试。。

[复制链接]

55

主题

331

帖子

337

积分

中级会员

Rank: 3Rank: 3

积分
337
发表于 2004-11-3 11:49:00 | 显示全部楼层 |阅读模式
我已经用D3D成功地导入了模型及场景,请问如何进行碰撞测试??我的模型根本无法停留在场景上...........

3

主题

95

帖子

107

积分

注册会员

Rank: 2

积分
107
发表于 2004-11-3 13:57:00 | 显示全部楼层

Re:如何在D3D中进行简单的碰撞测试。。

想让模型停留在场景上,碰撞检测并非好方法。如果是用碰撞检测的话,你就只能是用“解决碰撞运动”的方法,就是说:你不光是要碰撞,而且是如果碰撞了,那么如何解决运动。我记得D3D的X库中有一个将绑定体在多边形集合中进行碰撞的函数。

如果不用碰撞检测的话,我可能更推荐,那就是使用“表示面”,这是一种近似于基于3D视线测试寻路算法的东西。也就是说,你将所有的可以运动的面,单做一个模型表达出来。物体在其上运动的时候,先找到当前自己所在的面(也就是三角形),然后利用该三角形的顶点求出该三角形的表示平面,然后,通过平面的公式:Ax + By + Cz + D = 0来求得当给出X、Z坐标之后的Y轴,这一步可以叫做是:将一个投影在平面内。因为人走路运动,一般是基于地面,所以只考虑解决Y的运动就行了。下面是公式:(x和z就是传入的当前物体坐标,返回解决运动之后的Y坐标)
-(normal.x * x + normal.z * z + D) / normal.y
此法的唯一缺点就是如果表示模型做得与原模型不够吻合的话,就会经常产生“人在空中走”的现象了。呵呵,不过这一点可以人为避免的,只要能人为避免就行了。^_^

63

主题

871

帖子

891

积分

高级会员

Rank: 4

积分
891
QQ
发表于 2004-11-3 14:22:00 | 显示全部楼层

Re:如何在D3D中进行简单的碰撞测试。。

如果用的是X模型的话
D3DX里有个函数,,位置<x,0,z>方向<0,1,0>
求出相交的三角形的索引号和重心坐标
可以求出交点
取y值就可以了

55

主题

331

帖子

337

积分

中级会员

Rank: 3Rank: 3

积分
337
 楼主| 发表于 2004-11-3 14:35:00 | 显示全部楼层

Re:如何在D3D中进行简单的碰撞测试。。

非常感谢

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-23 02:11

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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