游戏开发论坛

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

怎样求出已知三角面内某一个点的位置

[复制链接]

75

主题

102

帖子

110

积分

注册会员

Rank: 2

积分
110
发表于 2007-8-30 17:36:00 | 显示全部楼层 |阅读模式
如题

不好意思,没说明白

2

主题

429

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
发表于 2007-8-30 19:29:00 | 显示全部楼层

Re:怎样求出已知三角面内某一个点的位置

某一个点?

让我们猜吗?

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2007-8-30 20:37:00 | 显示全部楼层

Re:怎样求出已知三角面内某一个点的位置

嗯 猜吧

18

主题

971

帖子

982

积分

高级会员

Rank: 4

积分
982
发表于 2007-8-31 08:59:00 | 显示全部楼层

Re:怎样求出已知三角面内某一个点的位置

参数?

75

主题

102

帖子

110

积分

注册会员

Rank: 2

积分
110
 楼主| 发表于 2007-8-31 10:45:00 | 显示全部楼层

Re:怎样求出已知三角面内某一个点的位置

哪位高人指点下小弟啊

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2007-8-31 11:25:00 | 显示全部楼层

Re:怎样求出已知三角面内某一个点的位置

把鼠标指的点反变换回世界空间,得到一个方向,然后做射线求交

2

主题

429

帖子

435

积分

中级会员

Rank: 3Rank: 3

积分
435
发表于 2007-8-31 12:51:00 | 显示全部楼层

Re:怎样求出已知三角面内某一个点的位置

如果只是想求模型拣选点的话,使用DX的那个求交函数,它会返回距离

你已经有了起点和方向向量,现在有了距离,自然就有了另一端点,也就是交点了。

如果只是单独一个面片的话,自己写个射线求交函数,后面的和上面一样。

4

主题

69

帖子

205

积分

中级会员

Rank: 3Rank: 3

积分
205
发表于 2007-8-31 20:11:00 | 显示全部楼层

Re:怎样求出已知三角面内某一个点的位置

看看sdk中的pick例子吧
关键在bool IntersectTriangle( const D3DXVECTOR3& orig, const D3DXVECTOR3& dir,
                        D3DXVECTOR3& v0, D3DXVECTOR3& v1, D3DXVECTOR3& v2,
                        FLOAT* t, FLOAT* u, FLOAT* v )
中,大致了解些
从屏幕鼠标坐标到空间中的射线orig
射线方向 dir
三角面的三个顶点 v0 v1 v2
返回射线原点到相交点的距离t,和交点的中心坐标(u,v)。

4

主题

69

帖子

205

积分

中级会员

Rank: 3Rank: 3

积分
205
发表于 2007-8-31 20:15:00 | 显示全部楼层

Re:怎样求出已知三角面内某一个点的位置

补充:重心坐标的概念

其中pU和pV用到了重心坐标的概念,下面稍作描述

一个三角形有三个顶点,在迪卡尔坐标系中假设表示为V1(x1,y1,z1),V2(x2,y2,z2),V3(x3,y3,z3),则三角形内任意一点的坐标可以表示为 pV = V1 + U(V2-V1) + V(V3-V1),所以已知三个顶点坐标的情况下,任意一点可用坐标(U,V)来表示,其中 参数U控制V2在结果中占多大的权值,参数V控制V3占多大权值,最终1-U-V控制V1占多大权值,这种坐标定义方式就叫重心坐标。


从BY 重剑,2004.5.28 重剑空间 看到的,不过现在这个页面好像已经打不开了。(:

119

主题

1367

帖子

1393

积分

金牌会员

Rank: 6Rank: 6

积分
1393
发表于 2007-8-31 23:25:00 | 显示全部楼层

Re:怎样求出已知三角面内某一个点的位置

//重心坐标的概念
//其中pU和pV用到了重心坐标的概念,下面稍作描述
    //一个三角形有三个顶点,在迪卡尔坐标系中假设表示为V1(x1,y1,z1),
        //V2(x2,y2,z2),V3(x3,y3,z3),则三角形内任意一点的坐标可以表示为 pV = V1 + U(V2-V1) + V(V3-V1),
        //所以已知三个顶点坐标的情况下,任意一点可用坐标(U,V)来表示,其中 参数U控制V2在结果中占多大的权值,
        //参数V控制V3占多大权值,最终1-U-V控制V1占多大权值,这种坐标定义方式就叫重心坐标。


        //判断一条射线是否能和三角形相交,而且交点在三角形内
        //orig是射线的起点, dir 是射线的方向,v0,v1,v2表示三角形
        //交点为 orig +  t*dir ,也可表示为 v0+u(v1-v0)+v(v2-v0) ,其中u 和 v 为重心坐标
        //这个方法返回真,表明相交, 如果T>0, 0<U<1,0<V<1,0<U+V<1,表明交点在三角形内部
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-25 02:46

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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