3d 无法理解tut代码中的光线投射数学

3d 无法理解tut代码中的光线投射数学,3d,raycasting,3d,Raycasting,请原谅我对数学的无知。我还没有找到任何能帮助我的资料,否则我就不会打开这个话题了 我想用javascript创建一个简单的光线投射引擎,我处理过瓷砖系统,这并不难,我以前也有过这样的经验 我的消息来源 和 我的问题是理解大部分的数学,我理解他使用的一些三角(在第二个链接中),但我不理解他植入光线投射的大部分 就像这句话: //光线在屏幕上经过哪里? `var rayScreenPos = (-numRays/2 + i) * stripWidth;` 什么的位置?xy科迪酸盐?银幕上

请原谅我对数学的无知。我还没有找到任何能帮助我的资料,否则我就不会打开这个话题了

我想用javascript创建一个简单的光线投射引擎,我处理过瓷砖系统,这并不难,我以前也有过这样的经验

我的消息来源 和

我的问题是理解大部分的数学,我理解他使用的一些三角(在第二个链接中),但我不理解他植入光线投射的大部分

就像这句话:
//光线在屏幕上经过哪里?

    `var rayScreenPos = (-numRays/2 + i) * stripWidth;`
什么的位置?xy科迪酸盐?银幕上的林氏

castSingleRay
我懂一些数学,但不懂他所说的坡度或“垂直地图/墙线”


我需要学习什么才能理解它?数学或编程的哪些主题?我可以下载任何好书或在线资源吗?

了解基本光线投射的最好方法是阅读全文

不管怎样,你所说的等式是从。正如(视野)所解释的,结果图像可能被划分为垂直部分(在opera教程中称为条带),这些垂直部分的像素大小可能不同(opera教程使用4px宽度)

然后,您试图找出屏幕上的
x
坐标是px中的当前条带(当前用于光线投射计算的条带)。这是
rayScreenPos
变量。您可以通过取左
x
轴边界
-numRays/2
(根据查看者的观察,您的视线是中间条纹,而不是最左边的条纹!)加上当前条纹
i
,再乘以以像素为单位的条纹大小
条纹宽度
,来确定该值(
x

然后,您可以很容易地从刚刚计算的条纹计算观众距离。因此,您将使用毕达哥拉斯定理并计算
rayViewDist

编辑


我的第一个raytracer花了我几个星期的时间来实现(所以我理解你的绝望),但在那之后,我只需要点击到位。我所说的观察者是指“摄像机的位置”。在opera dev tut中,FOV=60,stripeSize=4px,那么光线的数量是numberOfStripesInImage=sizeOfImage/sizeOfSplice->320/4->80条光线。。然后,第一个光线屏幕位置是(-80/2+0)*4->-160,这是相对于中间条纹的屏幕中心的x位置(视图位于屏幕中心)

查看我的教程。我正试图为每件事创造一个完美的解释。我不使用硬渲染方法,也不使用硬逻辑。我正在学习光线投射逻辑,选择简单的东西,因为对我来说,简单是最好的!我想这会对你有帮助

单击以访问教程。它位于github wiki中


我有点了解光线投射的工作原理,其实施是最难的部分。但是你为我清理了一些谢谢你,你说的“查看器”是什么意思?第一条射线的射线屏幕位置是160,所以是sceen上的x?但每一条都是4像素。我还是搞不懂。在我最大的一块骨头是塔防之前,我设计了2d游戏。有什么现代的容易理解的源代码吗?(你像一本书一样知道。你可能会看一些光线跟踪器的代码,但这通常是很难的。忘记光线投射并编写通常的基本光线跟踪器,然后你会得到所有的细微差别。我也学过三角学,光线跟踪器我读过它是一样的吗?