D3D9 Samples(16)--Pick
运行 Microsoft DirectX SDK (June 2010)中的 DirectX Sample Browser。找到Pick,然后点Install Project安装这个项目。先编译运行下项目,看看效果:
这个例子演示用鼠标选中模型中的一个面的算法。在屏幕空间(screen space)发出一条射线(ray),计算与模型是否有交点,从而实现选中的效果。
1. 准备工作
1.1 准备模型
OnCreateDevice
使用DXUT框架提供的CDXUTXFileMesh封装类来加载X文件。
创建一个顶点缓冲g_pVB来记录相交的面。
MsgProc
在这里接收鼠标左键按下消息,如果鼠标左键按下,则停止时钟,从而让模型不再旋转。
1.2 界面
勾选Use D3DXIntersect表明用D3DX库提供的这个函数计算交点;不勾选则不用D3DX库,自己计算。
勾选Show All Hits 表示显示所有与射线相交的三角形;不勾选表明只显示距离射线原点最短的相交三角形。
2. 核心算法
2.1 计算光标(Cursor)在窗口客户区(client-area)的位置
POINTptCursor;