Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 计算三维世界交点_C++_Directx_Directxmath - Fatal编程技术网

C++ 计算三维世界交点

C++ 计算三维世界交点,c++,directx,directxmath,C++,Directx,Directxmath,如何使用世界、视图和投影矩阵计算世界中地形的交点。现在让我们假设交点应该根据我的2D光标坐标计算,光标后面的地形部分应该是交点。 因此,如果我将鼠标放在屏幕的正中央,2D视图应该如下所示: 如果我们知道Y坐标,这个测试很容易,但是假设我们不知道Y坐标,这里可能有一个山人。。。我完全不知道如何有效地解决这个问题。 但这绝对是可能的。我检查了CryEngine,从我所能看到的,他们显示了发射武器时子弹与地面的碰撞点。任何帮助都将非常感谢,无论是教程还是其他 感谢Mikael。使用渲染图像进行鼠标拾取

如何使用世界、视图和投影矩阵计算世界中地形的交点。现在让我们假设交点应该根据我的2D光标坐标计算,光标后面的地形部分应该是交点。 因此,如果我将鼠标放在屏幕的正中央,2D视图应该如下所示:

如果我们知道Y坐标,这个测试很容易,但是假设我们不知道Y坐标,这里可能有一个山人。。。我完全不知道如何有效地解决这个问题。 但这绝对是可能的。我检查了CryEngine,从我所能看到的,他们显示了发射武器时子弹与地面的碰撞点。任何帮助都将非常感谢,无论是教程还是其他


感谢Mikael。

使用渲染图像进行鼠标拾取,或者在CPU端进行拾取(例如,使用光线行进),您基本上希望将切片的高度函数与摄影机光线相交,您可以通过小步进函数=光线行进来解决此问题。我正在检查光线行进,评论很好。你的地形总是平坦的吗?那么你就不需要像光线行进这样的迭代方法了。解可以用封闭的形式计算。不,我的地形并不总是平坦的,我正在实现一种射线行进法。只剩下一些闪光:。到目前为止效果很好。非常高的性能。我使用一个常量值作为步长,直到我在地下,然后我用更小的步长后退,直到找到交点。完成后,我会在这里上传代码。然而,我读到了一个阻止步长的函数,我不明白它是如何工作的,有人得到了一个好的链接吗?