问题标签 [raycasting]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
6497 浏览

xna - Octree raycasting/raytracing - best ray/leaf intersection without recursion

Could anyone provide a short & sweet explanation (or suggest a good tutorial) on how to cast a ray against a voxel octree without recursion?

I have a complex model baked into an octree, and I need to find the best/closest leaf that intersects a ray. A standard drill-down iterative tree walk:

  1. Grab the root node
  2. Check for intersection
  3. No? Exit
  4. Yes? Find child that intersects the ray that is closest to the ray's origin
  5. Loop until I reach a leaf or exit the tree

Always returns a leaf, but in instances where the tree stores, say, terrain, the closest node to the ray's origin doesn't necessarily contain the leaf that's the best match. This isn't suprising - taller objects in farther nodes won't get tested using this approach.

I can do this recursively by finding all of the intersecting leaves in the tree, sorting by distance and picking the closest one to the ray's position. However, this is slow and requires recursion.

I've read a little about using the Bresenham line algorithm to walk the tree, which seems to require that each node contain pointers to adjacent neighbors, but I'm unclear on how to implement this in a useful way.

Any suggestions? I can fake a stack in HLSL using a fixed-length array or a struct with an element for each potential stack entry, but the memory requirements for that can become crippling with a sufficiently large tree.

Help.

0 投票
1 回答
737 浏览

2d - 形状光线投射:确定不相交的最后位置的最佳方法?

我正在使用 Box2D(特别是 jBox2D)并且我正在尝试进行类似俄罗斯方块的块碰撞(即在它们相互重叠之前停止,以便它们无缝互锁)

在形状与另一个形状相交之前确定沿“射线”的最后位置的最简单方法是什么?(即确定块在特定方向行进时应该结束的位置,以便它与其他块顺利互锁) Box2D 似乎提供了通用的光线投射功能,但我看不出如何使用所提供的功能轻松做到这一点。


(注意:通常块游戏可以建模为网格,这大大简化了碰撞/目的地检测,因为您不必依赖实际的 2D/3D 属性。但是不可能使用这样的网格在我的情况下)

0 投票
1 回答
759 浏览

c - 使用 CSG 树进行射线投射

我正在做一个项目,我必须在其中执行光线投射并使用 CSG 树。但我不知道如何使用 CSG 树或为这个项目实施它。我可以进行光线投射并给出最终答案。我的问题实际上是如何实现树并链接它。

0 投票
1 回答
514 浏览

opengl - 我如何使用 glUnProject 计算 openGL 上的触摸

嗨,我发现了最近的计划和远的计划..然后如何识别使用这个我接触到的对象..谁能帮助我..这是我的代码..

0 投票
2 回答
4391 浏览

opengl - 光线投射体素和 OpenGL

我目前正在研究光线投射和体素,这是一个很好的组合。Sebastian Scholz 的 Voxelrenderer 很好地实现了这一点,但也使用了 OpenGL。我想知道他的公式是如何工作的;如何将 OpenGL 与光线投射和体素一起使用?光线投射的想法不是为每个像素(或线条,即 Doom 中的线)投射光线,然后绘制结果吗?

0 投票
2 回答
7331 浏览

math - 计算一个圆上两条切线的交点?

我尝试使用光线投射风格的功能来做到这一点,但无法获得任何可维护的结果。我正在尝试计算一个圆上两条切线之间的交点。这张图片应该有助于解释:

在此处输入图像描述

我已经用谷歌搜索 + 搜索了有关此问题的 stackoverflow,但找不到与此问题类似的任何内容。有什么帮助吗?

0 投票
3 回答
3101 浏览

c# - 2D 高度图上的基本(假)光线投射

基本上我想要做的是使用一个非常基本的光线投射系统对 2D 高度图进行着色,该系统基本上只是检查光线是否在应该对其进行着色之前被拦截。但是它不能正常工作,我已经为此苦苦挣扎了几个小时,所以我认为把它交给你们不会有什么坏处,因为我认为这可能是非常明显的事情,我不会看到它或如此复杂,我永远不会绕着它走。

我有一张这样的地图: 地图

光线投射给了我这个(请记住,它只是调试颜色;红色是光线拦截,但在预期位置(如此阴影)之前,蓝色将是正确位置的光线拦截(如此突出或原样),并且黄色表示该点在 while 循环切断之前根本没有光线相互作用)。 坏x2

结果应该是背面的斜坡和大山后面的区域(阴影)为红色,面向太阳的斜坡(高光)为蓝色。不应该有任何黄色。所以这张图片表明要么所有的光线都击中了错误的位置,要么光线在到达目标之前总是在其他地方相交,这是不可能的。

在这一点上,我高度怀疑问题出在我的三角上。

这是 Ray 类:

同样作为一种形式,投射每条光线的函数以及我如何称呼它:

if (lighting) CastSunRays(1f, MathHelper.PiOver4);

0 投票
1 回答
1288 浏览

android - 将 RayCasting 用于 2D 游戏

在我之前的一个问题中,我询问了 OpenGL 中的 onTouchEvents。这个想法是创建一个简单的应用程序,在你按下屏幕的地方画一个正方形。过了一会儿,我推出了一个应用程序,它可以按照应有的方式完成所有操作,但正方形没有重新绘制,它只是从屏幕上消失了。

有人告诉我要解决这个问题,我需要从我的 2D 角度将光线发送到 OpenGL 的 3D 环境中,但是对于我的生活,我无法理解为什么,因为当我阅读 raycasting 时,它似乎被使用了主要是为了灯光效果。究竟什么是光线投射?当我需要改变正方形位置的只是 x 和 y 轴时,为什么我需要 z 轴,无论触摸寄存器的深度如何,都可以从中找到坐标?

0 投票
2 回答
2642 浏览

c++ - CPU 光线投射

我正在尝试在 CPU 上投射八叉树(我知道 GPU 更好,但我现在无法让它工作,我相信我的八叉树纹理创建不正确)。

我了解需要做什么,到目前为止,我为每个像素投射了一条射线,并检查该射线是否与八叉树中的任何节点相交。如果是这样并且该节点不是叶节点,我检查光线是否与它的子节点相交。我一直这样做,直到一个叶节点被命中。一旦叶节点被击中,我就会得到该节点的颜色。

我的问题是,将其绘制到屏幕上的最佳方式是什么?目前我将颜色存储在一个数组中并使用 glDrawPixels 绘制它们,但这不会产生正确的结果,渲染中的间隙以及投影错误(我使用的是 glRasterPos3fv)。

编辑:到目前为止,这是一些代码,需要清理,抱歉。我省略了八叉树射线投射代码,因为我不确定它是否需要,但如果它有帮助我会发布:)

0 投票
2 回答
4721 浏览

javascript - 多边形中的点(Google Maps API v3)

我有一个 google maps api v3,它使用“The Di Lab”的插件来绘制多边形:

http://www.the-di-lab.com/?p=219

然后使用 tparkins 插件进行光线投射。

https://github.com/tparkin/Google-Maps-Point-in-Polygon

但是,我需要从多边形插件访问多边形对象。多边形插件中实际在地图上绘制多边形的部分是:

我会创建地图:

var creator = new PolygonCreator(map);

然后我必须通过调用来做多边形中的点:

var isWithinPolygon = polygonObj.containsLatLng("52,0");

例如:

基本上我需要的是第一个脚本中的多边形对象。两个javascript文件如下:

http://80.229.168.62/guild_service/server/js/polygon.min.js

http://80.229.168.62/guild_service/server/js/latlngcontains.js

运行脚本的页面是:

http://80.229.168.62/guild_service/server/map_view.php