2010-11-06 61 views
0

好吧,当我用gdi +绘制东西时,我曾经知道对象的坐标,但现在当我在directx中使用网格时9我不知道如何获得对象的坐标,所以我可以查找是否将鼠标悬停在某个对象上。任何想法如何找到坐标?directx 9 mouse over a object

回答

0

您需要将鼠标位置投射到世界中并将其转换为世界空间坐标,然后根据各种对象对其进行测试。你可能能找到一个库来为你做这件事,我知道OpenGL支持选择,大多数包装提供了增强的功能,但其原理是:

在窗口中找到鼠标坐标。使用这些坐标,投射射线(无论您是在系统中实际使用射线还是简单地进行类似的数学在这里都不是什么大问题)。您将使用当前视图矩阵(“相机”角度和位置)来计算光线的方向和原点。使用该射线,测试您的物体,边界框或几何体(无论您选择哪个)以找到该物体。使用交点坐标,找到位于该位置的对象。

如果场景相对静态,您也可以非常容易地使用深度缓冲区。只需将深度纹理设置为Z缓冲区,然后使用深度,鼠标位置和视图矩阵来查找交点。

也许可以这样做,即将每个对象映射到适当的屏幕坐标,但是您可能会遇到深度排序和重叠区域的问题。而且,将每个对象映射到每个窗口的窗口区域可能会造成不必要的缓慢。