参考教程
学习记录
这篇文章中我们主要介绍鼠标拾取(Picking),即鼠标点击选中物体的过程。本篇代码基于阴影映射代码,主要在 ApplicationClass
类中实现。
拾取过程一般分为两步,第一步为将鼠标从二维的屏幕坐标系转换为 3D 空间中的一个方向向量,然后使用此向量做与视野内可见 3D 物体的相交性测试,测试成功即可选中。
我们正常的渲染一个球体,如下:
当我们获取到鼠标左键按下时,我们执行我们的变换以及相交测试,部分代码如下:
1 | // Check if the left mouse button has been pressed. |
在 TestIntersection
方法中,我们使用与我们之前从 3D 变换相反的操作将鼠标从二维屏幕坐标系变换至三维空间,具体代码如下:
1 | float pointX, pointY; |
最后,执行我们的射线球体相交判断方法:
1 | RaySphereIntersect(rayOrigin, rayDirection, 1.0f); |
方法如下:
1 | bool ApplicationClass::RaySphereIntersect(D3DXVECTOR3 rayOrigin, D3DXVECTOR3 rayDirection, float radius) |
最终效果: