游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2119|回复: 4

DX中有没有函数能判断两个三角面是否相交

[复制链接]

66

主题

223

帖子

223

积分

中级会员

Rank: 3Rank: 3

积分
223
发表于 2007-9-30 09:35:00 | 显示全部楼层 |阅读模式
DX中有没有函数能判断两个三角面是否相交,或者能判断一条射线击中了某个三角面?
如果没有的话自己实现大概是什么思路?
望各位达人指点.

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2007-9-30 11:29:00 | 显示全部楼层

Re:DX中有没有函数能判断两个三角面是否相交

D3DXIntersectTri

66

主题

223

帖子

223

积分

中级会员

Rank: 3Rank: 3

积分
223
 楼主| 发表于 2007-9-30 15:03:00 | 显示全部楼层

Re:DX中有没有函数能判断两个三角面是否相交

多谢

5

主题

31

帖子

31

积分

注册会员

Rank: 2

积分
31
发表于 2007-9-30 17:55:00 | 显示全部楼层

Re:DX中有没有函数能判断两个三角面是否相交

下面是我写的射线与空间三角形相交的代码,效率还算挺高的:
bool RayHitTriangle( D3DXVECTOR3 org,D3DXVECTOR3 dir,D3DXVECTOR3 v0,D3DXVECTOR3 v1,D3DXVECTOR3 v2 )
        {
                D3DXVECTOR3 e1,e2,p,s,q;
                float u,v,tmp;

                e1 = v1 - v0;
                e2 = v2 - v0;

                D3DXVec3Cross( &p,&dir,&e2 );
                tmp = D3DXVec3Dot( &p,&e1 );

                tmp = 1.0f / tmp;
                s = org - v0;
                u = tmp * D3DXVec3Dot( &s,&p );

                if( u < 0.0f || u > 1.0f )
                {
                        return false;
                }

                D3DXVec3Cross( &q,&s,&e1 );
                v = tmp * D3DXVec3Dot( &dir,&q );

                if( v < 0.0f || v > 1.0f )
                {
                        return false;
                }

                float w = 1 - u - v;

                if( w < 0.0f || w > 1.0f )
                {
                        return false;
                }

                return true;
        }

66

主题

223

帖子

223

积分

中级会员

Rank: 3Rank: 3

积分
223
 楼主| 发表于 2007-9-30 22:08:00 | 显示全部楼层

Re:DX中有没有函数能判断两个三角面是否相交

哇,不介意的话就盗走了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-21 01:10

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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