3d拾取算法(课堂PPT).ppt

上传人:rrsccc 文档编号:9697902 上传时间:2021-03-18 格式:PPT 页数:25 大小:3.28MB
返回 下载 相关 举报
3d拾取算法(课堂PPT).ppt_第1页
第1页 / 共25页
3d拾取算法(课堂PPT).ppt_第2页
第2页 / 共25页
3d拾取算法(课堂PPT).ppt_第3页
第3页 / 共25页
3d拾取算法(课堂PPT).ppt_第4页
第4页 / 共25页
3d拾取算法(课堂PPT).ppt_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《3d拾取算法(课堂PPT).ppt》由会员分享,可在线阅读,更多相关《3d拾取算法(课堂PPT).ppt(25页珍藏版)》请在三一文库上搜索。

1、.,1,专题7 选择场景中的角色,.,2,抛砖引玉,.,3,抛砖引玉,.,4,抛砖引玉,.,5,抛砖引玉,.,6,专题7 选择场景中的角色,学习目标: 学习怎样实现拾取算法,弄懂它如何工作,主要掌握如下四个方面: 1) 能够获得屏幕中的点S,找到它所对应的投影窗口上的点P. 2)掌握如何计算拾取射线. 3)熟练掌握将射线与模型变换到同一坐标系中 4)掌握如何判断物体与射线相交 能够在程序中灵活运用拾取(重点),.,7,窗口的转换 拾取射线的计算 射线与物体坐标系的统一 射线与物体相交的计算 实例,专题授课要点,.,8,窗口的转换,确定鼠标选取点的屏幕坐标 (使用Windows API中的Get

2、CursorPos函数) 将屏幕上的点转换到透影窗口上 通过视口变换矩阵 可以将将投影窗口 上的点P(px,py,pz) 通过窗口变换产生 屏幕上的点,同样 已知点,通过逆变 换也就可以得到点P,.,9,拾取射线的计算,在观察坐标系中,拾取射线是一条从观察坐标原点出发的射线,所以我们只需要再确定一个该射线经过的点,就可以得到它在观察坐标系中的表示。假设我们要求的射线上的另外一点为该射线与透视投影平截头体近剪切面的交点,针对最普遍的透视投影而言,透视投影平截头体经投影变换后,变成半个立方体如图:,.,10,拾取射线的计算,投影坐标系以近剪切面中心为坐标原点,该立方体从z轴负向看过去与图形程序视区

3、相对应,最终近剪切面(前剪切面)上一点与屏幕坐标之间的对应关系如下图所示:,.,11,拾取射线的计算,py = (sy-sHeight/2)/sHeight*2; (公式2) pz =0;(实际该值可任意取,不影响最终结果。为了处理简单,我们取改值为0,表示该点取在近剪切面上)得到projPt后,我们需要做的是把该点坐标从投影空间转换到观察空间(ViewSpace),根据透视投影的定义,可假设点(px,py,pz)对应的齐次坐标为 (px*pw,py*pw,pz*pw,pw)我们可以通过 GetTransform( D3DTS_PROJECTION, ,.,12,拾取射线的代码实现,struc

4、t Ray D3DXVECTOR3 _origin; D3DXVECTOR3 _direction; ; Ray CalcPickingRay(int x, int y) float px = 0.0f; float py = 0.0f; D3DVIEWPORT9 vp; g_pD3DDevice-GetViewport( ,.,13,统一射线与物体坐标系,我们前面所计算出来的拾取射线是在视图空间中描述的为了完成相交计算我们还需要将物体与射线放到同一坐标系中,.,14,统一射线与物体坐标系,void TransformRay(Ray* ray, D3DXMATRIX* T) / transfo

5、rm the rays origin, w = 1. D3DXVec3TransformCoord( ,.,15,射线与物体的相交计算,方法:利用D3D提供的扩展函数D3DXIntersect,.,16,射线与物体的相交计算,lpMesh指向一个ID3DXBaseMesh的对象,最简单的方式是从.x文件获得,描述了要进行相交检测的三角面元集合的信息,具体规范参阅direct9 SDK pRayPos 指向射线发出点 pRayDir 指向前面我们辛辛苦苦求出的射线方向的向量 pHit 当检测到相交图元时,指向一个true,不与任何图元相交则为假 pU 用于返回重心坐标U分量 pV返回重心坐标V分

6、量 pDist 返回射线发出点到相交点的长度 注意:以上红色字体部分均指最近的一个返回结果(即*pDist最小) ppAllHits用于如果存在多个相交三角面返回相交的所有结果 pCountOfHits 返回共有多少个三角形与该射线相交,.,17,射线与物体的相交计算,方法(了解) 使用D3D扩展函数,毕竟有时不能满足具体需求,掌握了该方法,我们才能够获得最大的控制自由度,任意修改算法。 已知条件: 射线源点orginPoint,三角形三个顶点 v1,v2,v3,射线方向 Dir(均以三维坐标向量形式表示) 算法目的: 判断射线与三角形是否相交,如果相交求出交点的重心坐标(U,V)和射线原点到

7、交点的距离T。 我们可先假设射线与三角形相交则交点(注以下均为向量运算,*数乘,dot(X,Y) X,Y 点乘,cross(X,Y)X,Y叉乘;U,V,T为标量) 则: IntersectPoint = V1 + U*(V2-V1) + V*(V3-V1) ; IntersectPoint = originPoint + T*Dir;所以orginPoint + T*Dir = V1 + U*(V2-V1) + V*(V3-V1);,.,18,射线与物体的相交计算,bool RaySphereIntTest(Ray* ray, BoundingSphere* sphere) D3DXVECTO

8、R3 v = ray-_origin - sphere-_center; float b = 2.0f * D3DXVec3Dot( ,.,19,实例:拾取立方体,步骤: 第步:绘制立方体 第步:实现屏幕到投影窗口的变换 第步:计算拾取射线 第步:将射线与立方体统一到同一坐标系 第步:判断射线与立方体相交情况,.,20,实例:拾取立方体,实现效果图:,.,21,拾取课堂练习,练习拾取一个圆柱体,效果如下图所示:,.,22,实例:拾取游戏角色,选择怪兽,选中后在怪兽身上显示闪烁光标,表示怪兽已经拾取成功,.,23,作业:,绘制一个正四面体,并实现拾取 导入前面所提供的Yodan.x文件,并实现对人物的拾取,.,24,它山之石,课下可选阅读材料: 第15章,.,25,锦上添花,实现对人物选中后,设计人物完成选中后所布置的任务,如实现简单攻击,人物移动等,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1