Articles of 可视性确定

对所有可能的方向进行最快的能见度计算

我正在寻找你的建议。 我有一个庞大的体素化模型,就像图片中的那个(但是有更多的几百万个体素)。 为了减less模型的三角形总数,我可以去除体素中的共享面,但是三角形确实会保持很多。 我需要做的是创建一个索引,该索引将包含来自以下过程的布尔列表(可见/不可见)信息: 定义一组点,如图中3个黄色三维像素的质心(但是,这个集合可能再次包含数百万个点),并且每个点计算哪个体素(除了它们相应的容器)可以被看到(直接和未被阻挡的线的网站)向所有方向(像全球照明概念)。 如果射线源(来自给定点)甚至可以达到目标体素的最小值,则意味着我们对于该体素具有“真实”条件。 例如,如果我们假设图片中的射线源点是光源,那么蓝色圆圈中的所有体素对于特定点都是“真实的”。 这与游戏开发无关,所以如果我的post应该在其他地方,我很抱歉。 我只是觉得我应该在这里问一下,因为我的大部分search结果都是光线投射,硬阴影,可见的表面确定,OpenGL等,在这里非常相关。 我不需要看到任何graphics(或者具有较高的fps:D),只需要将结果存储到第三个模拟过程中即可。 我感觉到,如果我实施简单的几何计算,这个索引将运行时间太长(尽管这可以相当容易并行,我相信)。 尽管如此,我可以利用OpenGL和GPU吗? 这会大大提高我的工作吗? 我应该如何处理这个问题? 我正在使用华硕ROG-G752VY。 我只需要构建和存储这个索引(如果数十亿字节,我不会感到惊讶)。 模拟的其余部分不断运行在一个集群上。 此索引计算操作将只会运行一次或多或less。 我只是不知道用这个数量的射线源点我会提到什么执行时间(天/星期/年)以及对所有方向和体素的“粗暴”检查(使用或不使用OpenGL和GPU)。 但是,我可以预测,每次可见体素的最大数量将只有几千。 这是因为(遗憾的是,没有提及它),当它的行程距离超过“x”单位(“x”将比整个模型的尺寸小得多)时,这条射线有一个终生逻辑。 因此,对于比“X”更远的光线,search过程应该每次都会中断。 非常感谢你的时间!

确定一个物体是否在给定的距离自动“可见”?

我正在创建一个使用程序内容的环境。 为了优化性能,我提前准备小网格。 为了提高效率,我不想批量对最终框架做出微不足道贡献的对象。 我的问题是,我应该如何确定呢? 有没有一个常用的或可certificate的“正确的”algorithm? 我想的是这样的:根据摄像机参数计算最后一帧的边界框的大小,看看它是否低于一定的阈值。 有更好的吗? (PS。这不是不成熟的优化 – 目前我的批量超过65k VBO的限制 – 没有配料的小网格可能会节省一些绘制调用。还要清楚,我不是要求闭塞,我有一些小在一个场景中有非常大的细节的物体,如果它们距离足够远并且可以被安全地剔除,那么它们就不会被察觉。

给定一个观点,如何确定单个顶点的可见性?

我有一个3D三角形网格,我想知道,给定一个观点(由模型,视图和投影matrix定义),如果某个顶点是可见或不可见的。 我的方法是使用标准软件光栅化(我不能使用OpenGL / DX)渲染网格,即将所有的三角形顶点投影到屏幕空间,然后遍历每个三角形的边界框,并对三角形内的像素进行光栅化/阴影处理(使用重心坐标)。 我也在这里使用z-Buffer,并且渲染工作正常。 为了找出某个顶点是否可见,我的天真想法就是使用相同的matrix将该顶点从3D投影到2D,并将该像素的z值与z-Buffer中的值进行比较。 但是,这种方法不起作用,我把顶点标记为可见,应该是不可见的,反之亦然。 我相信这是由于以下原因:当我渲染三角形时,我将遍历三角形的边界框,并通过使用重心坐标在三个三角形顶点之间插值来设置颜色和深度值。 因此,屏幕上给定点(x,y)写入z缓冲区的深度值是组成三角形的3个顶点的z值的线性组合。 与此相反,当我稍后投影单个顶点时,我将渲染与任何三角形无关的精确点,从而为屏幕上的相同(x,y)位置获取不同的z值。 是我为什么不工作正确的假设,以及我将如何正确地确定顶点在网格中的可见性? 更新 :让我澄清这张照片是怎么回事: 假设投影到屏幕空间后,v0 =(1.1,1.1),v1 =(6.7,2.1),v2 =(3.7,6.7)。 渲染/栅格化三角形时,我有一个循环 for x = 1 to 7 // from floor(min(v0.x, v1.x, v2.x)) to ceil(max(v0.x, v1.x, v2.x)) for y = 1 to 7 // same for y current_pixel_center = (x+0.5, y+0.5); // we want calculations to use the center […]

计算:球面/方形/平面是否从某一点可见?

我正在寻找一种方法来检测,如果一个表单(形状可以改变,如果algorithm需要它)可以从基于3D瓦片的世界中的一个点看到。 这应该被用来作为某种types的墙上黑客保护措施,以便将玩家隐藏在墙后面。 这并不一定非常精确。 唯一的条件是algorithm不会返回假阴性。 因此,我认为这可能是最简单的select,在彼此的球员周围创造一个相当大的球体,并从视点到虚拟球体明显地进行操作。 我打算在较大的地图上使用这个,只有当玩家彼此远离时。 如果你能看到球员身后有一堵墙,那就不成问题了。 因为我不知道如何解决scheme可能看起来像我正在寻找一个非常抽象的说明这种algorithm是如何工作的。 我发现了这个非常类似的问题: 预计算可视性但是我认为这导致我走错了方向,因为我的主要方面是速度而不是正确。

如何快速确定2D中的对象是否在屏幕上?

目前,我在每个对象的渲染器的更新方法中都有这个: float a = transform.position.x * Main.scale; float b = transform.position.y * Main.scale; float c = Camera.main.transform.position.x * Main.scale; float d = Camera.main.transform.position.y * Main.scale; onscreen = a + width – c > 0 && a – c < GameView.width && b + height – d > 0 && b – d < GameView.height; transform.position是包含游戏引擎定义对象所在位置的2Dvector。 […]

确定物体是否在考虑障碍物的视野中

我正在考虑隐形游戏,其中一个对象有一个特定的视野,你想避免游戏结束。 视场可以是线性的或者圆形的或者任何任意组的像素/瓦片。 如果我不考虑障碍物(例如,如果你站在墙后面,他们仍然可以看到你),我可以使用两个物体的位置,使用简单的几何属性来确定玩家是否在物体的视野内,范围。 这可以高效地完成,虽然它假定对象是点。 然而,为了逼真起见,你应该能够躲在墙壁或树后面而不被看到。 这个问题通常如何解决? 我可以阅读哪些文章来了解更多关于这个问题的内容?

如何优化2D可视锥体计算?

我正在创建一个简单的2D游戏,并且受到地图上的墙壁和其他障碍影响的可见性锥形algorithm的困扰。 我目前唯一的问题是,它非常缓慢 。 在一个有100平方障碍物的地图上,一个UpdateVision调用最多需要60ms而没有编译器优化(最长15ms,所以仍然很长),尽管取决于锥体中有多less个障碍物。 据剖析器,大部分时间都花在find_intersection 。 我知道其中一个主要原因:algorithm实际上检查了120度锥体中的所有障碍物,忽略了它们有多远。 小圆锥实际上是这个的一个被掩没的版本: 所以早点忽略远点应该会有很大帮助。 除了我不能忽略他们,因为那样的事情发生: 我该如何改进? 这里是我的代码的评论相关部分: struct IntersectionData { float T1, T2; }; /* * For two lines, (p11, p12) and (p21, p22) * Finds their intersection point. * The point coordinate ca be calculated with: p11 + T1 * (p12 – p11) OR p21 + T2 * (p22 […]