专题7选择场景中的角色.pptVIP

  • 2
  • 0
  • 约5.04千字
  • 约 25页
  • 2017-06-20 发布于四川
  • 举报
抛砖引玉 抛砖引玉 抛砖引玉 抛砖引玉 专题7 选择场景中的角色 学习目标: 1. 学习怎样实现拾取算法,弄懂它如何工作,主要掌握如下四个方面:   1) 能够获得屏幕中的点S,找到它所对应的投影窗口上的点P.   2)掌握如何计算拾取射线.   3)熟练掌握将射线与模型变换到同一坐标系中   4)掌握如何判断物体与射线相交 2.能够在程序中灵活运用拾取(重点) 窗口的转换 拾取射线的计算 射线与物体坐标系的统一 射线与物体相交的计算 实例 窗口的转换 1.确定鼠标选取点的屏幕坐标 (使用Windows API中的GetCursorPos函数) 2.将屏幕上的点转换到透影窗口上  通过视口变换矩阵  可以将将投影窗口  上的点P(px,py,pz) 通过窗口变换产生  屏幕上的点S,同样  已知点S,通过逆变  换也就可以得到点P 拾取射线的计算     在观察坐标系中,拾取射线是一条从观察坐标原点出发的射线,所以我们只需要再确定一个该射线经过的点,就可以得到它在观察坐标系中的表示。假设我们要求的射线上的另外一点为该射线与透视投影平截头体近剪切面的交点,针对最普遍的透视投影而言,透视投影平截头体经投影变换后,变成半个立方体如图: 拾取射线的计算    投影坐标系以近剪切面中心为坐标原点,该立方体从z轴负向看过去与图形程序视区相对应,最终近剪切面(前剪切面)上一点与屏幕坐标之间的对应关系如下图所示: 拾取射线的计算 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, proj)函数获得投影矩阵proj; 拾取射线的代码实现 struct Ray { D3DXVECTOR3 _origin; D3DXVECTOR3 _direction; }; Ray CalcPickingRay(int x, int y) { float px = 0.0f; float py = 0.0f; D3DVIEWPORT9 vp; g_pD3DDevice-GetViewport(vp); D3DXMATRIX proj; g_pD3DDevice-GetTransform(D3DTS_PROJECTION, proj); px = ((( 2.0f*sx) / vp.Width) - 1.0f) / proj(0, 0); py = (((-2.0f*sy) / vp.Height) + 1.0f) / proj(1, 1); Ray ray; ray._origin = D3DXVECTOR3(0.0f, 0.0f, 0.0f); ray._direction = D3DXVECTOR3(px, py, 1.0f); return ray; } 统一射线与物体坐标系    我们前面所计算出来的拾取射线是在视图空间中描述的.为了完成相交计算我们还需要将物体与射线放到同一坐标系中.     统一射线与物体坐标系 void TransformRay(Ray* ray, D3DXMATRIX* T) { // transform the rays origin, w = 1. D3DXVec3TransformCoord( ray-_origin, ray-_origin, T); // transform the rays direction, w = 0. D3DXVec3TransformNormal( ray-_direction, ray-_direction, T); // normalize the direction D3DXVec3Normalize(ray-_direction, ray-_direction); } 射线与物体的相交计算 方法1:利用D3D提供的扩展函数D3DXIntersect 射线与物体的相交计算  lpMesh指向一个ID3DXBaseMesh的对象,最简单的方式是从.x文件获得,描述了要进行相交检测的三角面元集合的信息,具体规范参阅direct9 SDK  pRayPos 指向射线发出点  pRayDir 指向前面我们辛辛苦苦求出的射线方向的向量  pHit 当检测到相交图元时,指向一个true,不与

文档评论(0)

1亿VIP精品文档

相关文档