已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
专题7选择场景中的角色 1 抛砖引玉 2 抛砖引玉 3 抛砖引玉 4 抛砖引玉 5 专题7选择场景中的角色 学习目标 学习怎样实现拾取算法 弄懂它如何工作 主要掌握如下四个方面 1 能够获得屏幕中的点S 找到它所对应的投影窗口上的点P 2 掌握如何计算拾取射线 3 熟练掌握将射线与模型变换到同一坐标系中4 掌握如何判断物体与射线相交 能够在程序中灵活运用拾取 重点 6 窗口的转换拾取射线的计算射线与物体坐标系的统一射线与物体相交的计算实例 专题授课要点 7 窗口的转换 确定鼠标选取点的屏幕坐标 使用WindowsAPI中的GetCursorPos函数 将屏幕上的点转换到透影窗口上通过视口变换矩阵可以将将投影窗口上的点P px py pz 通过窗口变换产生屏幕上的点 同样已知点 通过逆变换也就可以得到点P 8 拾取射线的计算 在观察坐标系中 拾取射线是一条从观察坐标原点出发的射线 所以我们只需要再确定一个该射线经过的点 就可以得到它在观察坐标系中的表示 假设我们要求的射线上的另外一点为该射线与透视投影平截头体近剪切面的交点 针对最普遍的透视投影而言 透视投影平截头体经投影变换后 变成半个立方体如图 9 拾取射线的计算 投影坐标系以近剪切面中心为坐标原点 该立方体从z轴负向看过去与图形程序视区相对应 最终近剪切面 前剪切面 上一点与屏幕坐标之间的对应关系如下图所示 10 拾取射线的计算 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 11 拾取射线的代码实现 structRay D3DXVECTOR3 origin D3DXVECTOR3 direction RayCalcPickingRay intx inty floatpx 0 0f floatpy 0 0f D3DVIEWPORT9vp g pD3DDevice GetViewport 12 统一射线与物体坐标系 我们前面所计算出来的拾取射线是在视图空间中描述的 为了完成相交计算我们还需要将物体与射线放到同一坐标系中 13 统一射线与物体坐标系 voidTransformRay Ray ray D3DXMATRIX T transformtheray sorigin w 1 D3DXVec3TransformCoord 14 射线与物体的相交计算 方法 利用D3D提供的扩展函数D3DXIntersect 15 射线与物体的相交计算 lpMesh指向一个ID3DXBaseMesh的对象 最简单的方式是从 x文件获得 描述了要进行相交检测的三角面元集合的信息 具体规范参阅direct9SDKpRayPos指向射线发出点pRayDir指向前面我们辛辛苦苦求出的射线方向的向量pHit当检测到相交图元时 指向一个true 不与任何图元相交则为假pU用于返回重心坐标U分量pV返回重心坐标V分量pDist返回射线发出点到相交点的长度注意 以上红色字体部分均指最近的一个返回结果 即 pDist最小 ppAllHits用于如果存在多个相交三角面返回相交的所有结果pCountOfHits返回共有多少个三角形与该射线相交 16 射线与物体的相交计算 方法 了解 使用D3D扩展函数 毕竟有时不能满足具体需求 掌握了该方法 我们才能够获得最大的控制自由度 任意修改算法 已知条件 射线源点orginPoint 三角形三个顶点v1 v2 v3 射线方向Dir 均以三维坐标向量形式表示 算法目的 判断射线与三角形是否相交 如果相交求出交点的重心坐标 U V 和射线原点到交点的距离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 17 射线与物体的相交计算 boolRaySphereIntTest Ray ray BoundingSphere sphere D3DXVECTOR3v ray origin sphere center floatb 2 0f D3DXVec3Dot 18 实例 拾取立方体 步骤 第 步 绘制立方体第 步 实现屏幕到投影窗口的变换第 步 计算拾取射线第 步 将射线与立方体统一到同一坐标系第 步 判断射线与立方体相交情况 19 实例 拾取立方体 实现效果图 20 拾取课堂练习 练习拾取一个圆柱体 效果如下图所示 21 实例 拾取游戏角色 选择怪兽 选中后在怪兽身上显示闪烁光标 表示怪兽已经拾取成功 22 作业 绘
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025河南许昌儿童医院护理人员招聘考试笔试参考题库附答案解析
- 2025江苏宿迁钟吾大数据发展集团有限公司秋季(第二批次)招聘工作人员6人笔试考试参考题库及答案解析
- 稀土原辅材料预处理工安全应急测试考核试卷含答案
- 2025吉林大学白求恩第一医院生殖中心产前诊断中心采血员招聘3人考试笔试备考试题及答案解析
- 武汉小学考试试卷及答案
- 人体机能学考试及答案
- 压力机(生产线)操作工安全实操强化考核试卷含答案
- 糖汁蒸发工安全操作能力考核试卷含答案
- 2025重庆巫山县人力社保局公益岗招聘2人笔试考试备考试题及答案解析
- 气体分离工操作评估强化考核试卷含答案
- 低蛋白血症个案护理
- 农业安全知识培训课件
- 高血压教学病例讨论课件
- 总经理私章管理制度
- 造价咨询劳务合同协议
- 饮料生产卫生规范培训
- 饭店管理概论教案 (中职教育)
- 供应商整改管理制度
- 汽车电子商务行业现状
- 大中型企业安全生产标准化管理体系要求变化解读
- CHINET2024年全年细菌耐药监测结果
评论
0/150
提交评论