游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2644|回复: 9

又是碰撞的问题,高手们快来救我呀,。。。

[复制链接]

51

主题

134

帖子

140

积分

注册会员

Rank: 2

积分
140
发表于 2007-2-12 22:25:00 | 显示全部楼层 |阅读模式
最近一直在做碰撞检测,看了些资料,但还是有很多问题。。。
在《在Direct3D程序中运用碰撞检测》http://dev.gameres.com/Program/Visual/3D/Collision.htm
中的碰撞检测方式很实用,但是有个问题的。。。当检测出NEW点在平面背面而OLD点在正面时,要检测顶点是否在三角形(我自己程序里用的是矩形)内部,但是他没有说清楚用的是NEW点还是OLD点(他在程序里写的是OLD点。。。),
如果NEW点和OLD点一个在内部而另一个不在内部。。。那问题就严重了,就要检测NEW点与OLD点连成的直线是否穿过三角形(矩形),请问这个如何做。。。
哎。。碰撞对我这种数学差的人来说简直就是地狱口牙。。


sf_2007212222454.jpg

197

主题

1041

帖子

1104

积分

金牌会员

Rank: 6Rank: 6

积分
1104
QQ
发表于 2007-2-12 22:32:00 | 显示全部楼层

Re:又是碰撞的问题,高手们快来救我呀,。。。

open geometry library,search "cross"

51

主题

134

帖子

140

积分

注册会员

Rank: 2

积分
140
 楼主| 发表于 2007-2-12 23:17:00 | 显示全部楼层

Re:又是碰撞的问题,高手们快来救我呀,。。。

真的有检测直线是否穿过三角形或矩形的函数吗(不是平面)。。。什么库里的,能不能得到交点
最好把库和函数都告诉我,DX9SDK里没有。。。
还有、拜托说中文好不好

13

主题

113

帖子

123

积分

注册会员

Rank: 2

积分
123
QQ
发表于 2007-2-12 23:37:00 | 显示全部楼层

Re: Re:又是碰撞的问题,高手们快来救我呀,。。。

PassByYou: Re:又是碰撞的问题,高手们快来救我呀,。。。

open geometry library,search "cross"


open geometry library —— 一个开源的计算几何程序库

search "cross" —— 搜索关键字"cross"(相交)  

36

主题

197

帖子

197

积分

注册会员

Rank: 2

积分
197
发表于 2007-2-13 10:36:00 | 显示全部楼层

Re:又是碰撞的问题,高手们快来救我呀,。。。

dx sdk的例子pick中IntersectTriangle函数,可以判断直线是否穿过三角形

楼主可以拿来44

51

主题

134

帖子

140

积分

注册会员

Rank: 2

积分
140
 楼主| 发表于 2007-2-13 21:31:00 | 显示全部楼层

Re:又是碰撞的问题,高手们快来救我呀,。。。

那有下载 没找到。。。

51

主题

134

帖子

140

积分

注册会员

Rank: 2

积分
140
 楼主| 发表于 2007-2-13 22:22:00 | 显示全部楼层

Re:又是碰撞的问题,高手们快来救我呀,。。。

那个PICK我看了、挺好的,就是有些看不大懂,那个*T *U *V返回的是什么

51

主题

134

帖子

140

积分

注册会员

Rank: 2

积分
140
 楼主| 发表于 2007-2-14 23:11:00 | 显示全部楼层

Re:又是碰撞的问题,高手们快来救我呀,。。。

自己顶,不懂就决不罢休
帮我看下呀
bool collision1::IntersectTriangle( const D3DXVECTOR3& orig, const D3DXVECTOR3& dir,
                        D3DXVECTOR3& v0, D3DXVECTOR3& v1, D3DXVECTOR3& v2,
                        FLOAT* t, FLOAT* u, FLOAT* v )
{
            // Find vectors for two edges sharing vert0
    D3DXVECTOR3 edge1 = v1 - v0;
    D3DXVECTOR3 edge2 = v2 - v0;

    // Begin calculating determinant - also used to calculate U parameter
    D3DXVECTOR3 pvec;
    D3DXVec3Cross( &pvec, &dir, &edge2 );

    // If determinant is near zero, ray lies in plane of triangle
    FLOAT det = D3DXVec3Dot( &edge1, &pvec );

    D3DXVECTOR3 tvec;
    if( det > 0 )
    {
        tvec = orig - v0;
    }
    else
    {
        tvec = v0 - orig;
        det = -det;
    }

    if( det < 0.0001f )
        return FALSE;

    // Calculate U parameter and test bounds
    *u = D3DXVec3Dot( &tvec, &pvec );
    if( *u < 0.0f || *u > det )
        return FALSE;

    // Prepare to test V parameter
    D3DXVECTOR3 qvec;
    D3DXVec3Cross( &qvec, &tvec, &edge1 );

    // Calculate V parameter and test bounds
    *v = D3DXVec3Dot( &dir, &qvec );
    if( *v < 0.0f || *u + *v > det )
        return FALSE;

    // Calculate t, scale parameters, ray intersects triangle
    *t = D3DXVec3Dot( &edge2, &qvec );
    FLOAT fInvDet = 1.0f / det;
    *t *= fInvDet;
    *u *= fInvDet;
    *v *= fInvDet;

    return TRUE;
}

不大懂。。。那个*T *U *V返回的是什么

31

主题

104

帖子

108

积分

注册会员

Rank: 2

积分
108
发表于 2007-12-2 12:04:00 | 显示全部楼层

Re:又是碰撞的问题,高手们快来救我呀,。。。

T是射线到交点的距离,UV分别是在三角形里的比例

51

主题

134

帖子

140

积分

注册会员

Rank: 2

积分
140
 楼主| 发表于 2007-12-2 14:14:00 | 显示全部楼层

Re:又是碰撞的问题,高手们快来救我呀,。。。

几百年前的帖子了 早解决了 还翻出来。。。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-17 04:35

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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