directx 9鼠标悬停在一个物体上

时间:2010-11-06 04:47:28

标签: c++ winapi visual-c++ directx

好的,当我以前使用gdi +绘制东西我曾经知道对象的坐标但现在当我在directx 9中使用网格我不知道如何获取对象的坐标所以我可以找到鼠标是否超过宾语。任何想法如何找到坐标?

1 个答案:

答案 0 :(得分:0)

您需要将鼠标位置投射到世界中并将其转换为世界空间坐标,然后针对各种对象进行测试。您可以找到一个库来为您执行此操作,我知道OpenGL支持拾取,大多数包装器为此提供增强功能,但原则是:

在窗口中找到鼠标坐标。使用这些坐标,投射一条光线(无论你是否真的在系统中使用光线,或者只是在这里进行类似的数学运算)都不会进入这个世界。您将使用当前视图矩阵(“相机”角度和位置)来计算光线的方向和原点。使用该光线,测试您的对象,它们的边界框或几何体(无论您选择哪个)来查找对象。使用交叉点坐标,找到该位置的对象。

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

可以反过来执行此操作,即将每个对象映射到适当的屏幕坐标,但是您可能会遇到深度排序和重叠区域的问题。此外,每帧可能会不必要地将每个对象映射到窗口区域。