- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Direct3D 中实现图元的鼠标拾取
重剑,2004.5.28
3D 交互图形应用程序中,常常要用鼠标去选择图形,其实现的机制基于鼠标拾取算法。
本文主要讲述如何在 D3D 中实现图元的鼠标拾取。为了讨论简单,本文假定读者理解D3D
坐标变换流程和基本的图形学知识,如果阅读有困难请参考相关资料。
1、什么是拾取,拾取能做什么?
首先,拾取操作指当我们在屏幕上用鼠标点击某个图元应用程序能返回该图元的一个标
志和某些相关信息。有图形程序设计经验的人都知道,有这些信息就表示我们有了对该图元
的控制权,我们可以删除,可以编辑,可以任意对待该图元,至于你到底想干什么,就是阁
下自己的事了^_^ 。
2、拾取操作的步骤和实现
拾取算法的思想很简单:得到鼠标点击处的屏幕坐标,通过投影矩阵和观察矩阵把该坐
标转换为通过视点和鼠标点击点的一条射入场景的光线,该光线如果与场景模型的三角形相
交(本文只处理三角形图元),则获取该相交三角形的信息。本文讲述的方法除可以得到三
角形的一个索引号以外还可以得到相交点的重心坐标。
从数学角度来看,我们只要得到射线的方向矢量和射线的出射点,我们就具备了判断射
线与空间一个三角面是否相交的条件,本文主要讨论如何获得这些条件,并描述了射线三角
面相交判断算法和 D3D 的通常实现方法。
根据拾取操作的处理顺序,大概可以依次分为以下几个步骤
2.1 . 变换并获得通过视点和屏幕上点击点的射线矢量(Dir )
详细介绍之前,为了大家方便理解,我们要先简单说一下 d3d 坐标转换的大概流程,如
下图:
所以我们要通过一系列的反变换,得到我们关心的值在世界坐标中的表示。
2.1.1 确定鼠标选取点的屏幕坐标
这一步是非常简单的 Windows 给我们提供了 API 来完成屏幕坐标的获取,使用
GetCursorPos 获得鼠标指针位置,然后再利用 ScreenToClient 转换坐标到客户区坐标系
( 以窗口视区左上角为坐标原点,单位为像素) ,设该坐标为(POINT screenPt )。
2.1.2 得到 Dir 在观察坐标空间内的表示
在观察坐标系中,Dir 是一条从观察坐标原点出发的射线,所以我们只需要再确定一个
该射线经过的点,就可以得到它在观察坐标系中的表示。假设我们要求的射线上的另外
一点为该射线与透视投影平截头体近剪切面的交点,针对最普遍的透视投影而言,透视
投影平截头体经投影变换后,变成一个 1/2 立方体(请允许我这么叫^_^ ,因为它的大
小为一个正方体的一半,x,y 方向边长为 2 ,z 方向为 1)如图:
投影坐标系以近剪切面中心为坐标原点,该立方体从 z 轴负向看过去与图形程序视区相
对应,最终近剪切面(前剪切面)上一点与屏幕坐标之间的对应关系如下图所示:
根据比例关系,screenPt 与投影空间上的点 projPt 之间的关系为
假设图形程序窗口的宽为 screenWidth,高为 screenHeight,
projPt.x = (screenPt.x-screenWidth/2)/screenWidth*2; (公式1)
projPt.y = -(screenPt.y-screenHeight/2)/screenHeight*2; (公式2)
projPt.z =0;(实际该值可任意取,不影响最终结果。为了处理简单,我们取改值为 0,表示该点取
在近剪切面上)
得到 projPt 后,我们需要做的是把该点坐标从投影空间转换到观察空间(view space),
根据透视投影的定义,可假设点(projPt.x,projPt.y ,projPt.z)
对应的其次坐标为
(projPt.x*projPt.w,projPt.y*projPt.w ,projPt.z*projPt.w ,projPt.w)
我们可以通过 GetTransform( D3DTS_PROJECTION, ProjMatrix) 函数获得投影矩
阵 ProjMatrix,则根据观察空间到投影空间的变换关系则
(projPt.x*projPt.w,projPt.y*projPt.w ,projPt.z*projPt.w ,projPt.w)
= (viewPt.x ,viewPt.y ,viewPt.z, 1)*pProjMatrx;
根据定义和图形学原理
您可能关注的文档
- 《安徽蓝源生物质能源产万吨秸秆固化成型燃料及生物质炉具(一期)项目环境影响报告表》公示环评报告.pdf
- eiafans稻香湖再生水厂外部市政配套工程环境影响评价简本环评公众参与1883.pdf
- ERP与企业管理——理论、方法、系统(第2版) 教学课件 作者 978-7-302-30265-0 第06章需求管理--企业运营的源头.pdf
- DS1302,DHT11,LCD1602,TLC2543,酒精传感器,烟雾传感器课程设计+原理图+PCB图+程序.pdf
- ekc 假说与中国经济增长 - 社科网-社科网.pdf
- 《和州置业有限责任历阳镇天都新城农民安置房(五期)建设工程项目》公示217.pdf
- CASE STUDY PUNGWE RIVER BASIN IN MOZAMBIQUE:莫桑比克蓬圭河流域为例.pdf
- 《桐城市金鹰塑业产万只无纺布袋生产线项目环境影响报告表》公示218.pdf
- Hoechst淤浆法高密度聚乙烯催化剂的开发及工业应用.pdf
- DSC-P93 数码相机电路图.pdf
- camera module rma退货作业规范(ver.0).pdf
- CDMA 网络语音呼叫接续时长的专项优化及测试.pdf
- FX2N系列PLC在立式车床控制系统中的应用.pdf
- DB11T1367-2016固定污染源废气 甲烷-总烃-非甲烷总烃的测定 便携式氢火焰离子化检测器法.pdf
- Clipping a Mesh Against a Plane:夹在平面网格.pdf
- FT380L油箱隔板底边纵向点焊自动传动工装毕业设计(可编辑).doc
- GA371-2001 计算机信息系统实体安全技术要求 第1部分 局域计算环境.pdf
- HR工具-文本范例.pdf
- death in disney films implications for children's迪士尼电影对儿童的影响.pdf
- DSC-T200 数码相机电路图.pdf
最近下载
- 社会组织与法人登记管理工作 .ppt VIP
- 西门子伺服操作说明书SINAMICS V90、SIMOTICS S-1FL6.pdf VIP
- 科技论文图表等规范表达.pptx VIP
- 第4章_电磁波的传播.ppt
- 2025年初级会计师《初级会计实务》思维导图.pdf VIP
- (高清版)B-T 22930.2-2021 皮革和毛皮 金属含量的化学测定 第2部分:金属总量.pdf VIP
- 石油化工储运系统罐区设计规范.pdf VIP
- B100376宁夏社会科学院职工食堂维修工程招标文件.doc VIP
- sci论文的图表规范.doc VIP
- 2025年广东省公需课《人工智能赋能制造业高质量发展》试题答案详解.docx VIP
文档评论(0)