网络游戏脚本编程.ppt

网络游戏脚本编程.ppt

ID:52648414

大小:393.50 KB

页数:19页

时间:2020-04-12

网络游戏脚本编程.ppt_第1页
网络游戏脚本编程.ppt_第2页
网络游戏脚本编程.ppt_第3页
网络游戏脚本编程.ppt_第4页
网络游戏脚本编程.ppt_第5页
资源描述:

《网络游戏脚本编程.ppt》由会员上传分享,免费在线阅读,更多相关内容在PPT专区-天天文库

1、网络游戏脚本编程专业教程北京汇众益智科技有限公司鼠标拾取什么是拾取,拾取能做什么?拾取操作指当我们在屏幕上用鼠标点击某个图元,应用程序能返回该图元的一个标志或某些相关信息。有这些信息就得到该图元的控制权,我们可以删除,可以编辑,可以任意对待该图元拾取操作的原理拾取算法的思想很简单:得到鼠标点击处的屏幕坐标,通过投影矩阵和观察矩阵把该坐标转换为通过视点和鼠标点击点的一条射入场景的光线,该光线如果与场景模型的三角形相交(本文只处理三角形图元),则获取该相交三角形的信息。从数学角度来看,我们只要得到射线的方向矢量和射线的出射点,我们就具备了判断射线与空间一个三角面是否相交的条

2、件坐标系变换d3d坐标系转换的流程,如下图:所以我们要通过一系列的反变换,得到我们关心的值在世界坐标中的表示。确定鼠标选取点的屏幕坐标WindowsAPI提供了函数来完成屏幕坐标的获取,使用GetCursorPos获得鼠标指针位置,然后再利用ScreenToClient转换到客户区坐标系(以窗口视区左上角为坐标原点),设该坐标为(POINTscreenPt)。得到该点在投影空间内的表示透视投影变换,就是view空间到project空间的带透视性质的坐标变换变换之后必须保证view空间中所有处于可视范围内的点统统落在project空间的可视区域内透视投影内部原理view空

3、间中的可见范围就是常说的视平截体(viewfrustum)。如图,view空间中可视范围从view空间的x正半轴看过去是下图这个样子:上下边界为y=±z*tan(fov/2)project空间的可视范围。这个空间应当是处于我们所见到的屏幕上。实际上将屏幕表面视作project空间的xoy平面,再加一条垂直屏幕向里的z轴,这样就构成了我们想要的坐标系。现在我们可以用视口(viewport)的大小来描述这个可视范围了。比如说全屏幕640*480的分辨率,原点在屏幕中心,那我们得到的可视区域为一个长方体,它如下图所示:将project空间的可视范围定义为x∈[-1,1],y∈

4、[-1,1],z∈[0,1]的一个立方体从project空间的x正半轴看看我们的视区范围:这个区域的上下边界为y’=±1ProjMatrix==根据比例关系,screenPt与投影空间上的点projPt之间的关系为假设图形程序窗口的宽为screenWidth,高为screenHeight,projPt.x=(screenPt.x-screenWidth/2)/screenWidth*2;projPt.y=(screenPt.y-screenHeight/2)/screenHeight*2;projPt.z=0;(实际该值可任意取,不影响最终结果。为了处理简单,我们取改值

5、为0,表示该点取在近剪切面上)得到projPt后,我们需要做的是把该点坐标从投影空间转换到观察空间(viewspace),根据透视投影的定义,可假设点(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

6、*projPt.w,projPt.z*projPt.w,projPt.w)=(viewPt.x,viewPt.y,viewPt.z,1)*pProjMatrx;ProjMatrix==所以,(projPt.x*projPt.w,projPt.y*projPt.w,projPt.z*projPt.w,projPt.w)=(viewPt.x*ProjMatrix._m11,viewPt.y*ProjMatrix._m22,viewPt.z*Q-QZn,viewPt.z)所以projPt.x*projPt.w=viewPt.x*ProjMatrix._m11projPt.y*

7、projPt.w=viewPt.y*ProjMatrix._m22projPt.z*projPt.w=viewPt.z*Q-QZn(注意projPt.z=0)projPt.w=viewPt.z;解得viewPt.x=projPt.x*Zn/ProjMatrix._m11;viewPt.y=projPt.y*Zn/ProjMatrix._m22;viewPt.z=Zn;化简一下三个分量同除近剪切面z坐标Zn,该方向矢量可写作DIRview=(projPt.x/projMatrix._m11,projPt.y/projMatrix._m22,

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。