光线投射公式理解
Raycasting's formula understending
我正在使用光线投射进行项目(只是重新制作旧的好 wolf3d 游戏)。我由一个教程领导。我一直无法理解他在其中使用的数学。我试图进入它并浪费了很多时间谷歌搜索,绘图和解决它,但我无法得到那个结果。在这里问,因为数学和游戏开发社区看起来人口少得多。还有 gamedev community 也有和我一样的问题,但仍然没有答案。所以,也许数学好的人可以解释一下。
教程是这么说的:
When deriving deltaDistX geometrically you get, with Pythagoras, the formula "sqrt(1 + (rayDirY * rayDirY) / (rayDirX * rayDirX))", but this can be simplified to abs(1 / rayDirX). Similarly, deltaDistY is "sqrt(1 + (rayDirX * rayDirX) / (rayDirY * rayDirY))" which can be simplified to abs(1 / rayDirY).
rayDirX 和rayDirY 是我们射线的X 和Y 坐标。网格的每一侧都是 1。我猜它与重新缩放毕达哥拉斯定理 here it goes 有关。但是这怎么简化成这样呢?
abs(1 / rayDirX) and abs(1 / rayDirY)
感谢任何帮助和信息。
我在看lodev指南的时候也遇到了同样的问题。问自己。这是他的回复:
为简洁起见,我们将 rayDirX 和 rayDirY 称为 x 和 y。那么:
sqrt(1 + y * y / (x * x)) = sqrt((x * x + y * y) / (x * x))
但是我们知道rayDir的长度永远是1,所以(x * x + y * y)
就是1
所以 sqrt(1 / (x * x))
等于 abs(1 / x)
.
我正在使用光线投射进行项目(只是重新制作旧的好 wolf3d 游戏)。我由一个教程领导。我一直无法理解他在其中使用的数学。我试图进入它并浪费了很多时间谷歌搜索,绘图和解决它,但我无法得到那个结果。在这里问,因为数学和游戏开发社区看起来人口少得多。还有 gamedev community 也有和我一样的问题,但仍然没有答案。所以,也许数学好的人可以解释一下。
When deriving deltaDistX geometrically you get, with Pythagoras, the formula "sqrt(1 + (rayDirY * rayDirY) / (rayDirX * rayDirX))", but this can be simplified to abs(1 / rayDirX). Similarly, deltaDistY is "sqrt(1 + (rayDirX * rayDirX) / (rayDirY * rayDirY))" which can be simplified to abs(1 / rayDirY).
rayDirX 和rayDirY 是我们射线的X 和Y 坐标。网格的每一侧都是 1。我猜它与重新缩放毕达哥拉斯定理 here it goes 有关。但是这怎么简化成这样呢?
abs(1 / rayDirX) and abs(1 / rayDirY)
感谢任何帮助和信息。
我在看lodev指南的时候也遇到了同样的问题。问自己。这是他的回复:
为简洁起见,我们将 rayDirX 和 rayDirY 称为 x 和 y。那么:
sqrt(1 + y * y / (x * x)) = sqrt((x * x + y * y) / (x * x))
但是我们知道rayDir的长度永远是1,所以(x * x + y * y)
就是1
所以 sqrt(1 / (x * x))
等于 abs(1 / x)
.