Questions tagged «interpolation»

根据一组已知结果估算结果(通常为数字)的做法。

5
如何避免纹理图集中出现纹理渗漏?
在我的游戏中,有一个由方块构成的Minecraft类地形。我从体素数据生成顶点缓冲区,并使用纹理图集显示不同块的外观: 问题在于,远方立方体的纹理会与纹理图集中的相邻图块进行插值。这会导致多维数据集之间出现颜色错误的线条(您可能需要以完整尺寸查看下面的屏幕截图,以查看图形缺陷): 现在,我使用这些插值设置,但尝试了每种组合,即使GL_NEAREST没有mipmapping也无法提供更好的结果。 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 我还尝试在纹理坐标中添加偏移量,以选择较小的瓷砖区域,但是由于不想要的效果取决于到相机的距离,因此无法完全解决问题。在很远的距离,条纹仍然会出现。 我该如何解决这种纹理渗出?由于使用纹理图集是流行的技术,因此可能有一种通用的方法。遗憾的是,由于注释中解释的某些原因,我无法更改为其他纹理或纹理阵列。

2
如何在两个游戏状态之间进行插值?
创建在两个更新状态之间插值所有对象位置的系统的最佳模式是什么? 更新将始终以相同的频率运行,但是我希望能够以任何FPS渲染。因此,无论每秒帧数是低于还是高于更新频率,渲染都将尽可能平滑。 我想将1帧更新为从当前帧到将来帧的将来插值。这个答案有一个讨论此操作的链接: 半固定或全固定时间步长? 编辑:如何在插值中使用最近和当前速度?例如,仅使用线性插值,它将在位置之间以相同的速度移动。我需要一种方法来对两点之间的位置进行插值,但是要考虑到插值在每个点的速度。这对于诸如粒子效果之类的低速率模拟将很有帮助。

3
为什么某些联网游戏使用插值而有些使用寻路来进行远程移动?
这是一个悬而未决的问题,但我希望看到有人为这两者做出良好的推理。 举两个例子: 插值模型 考虑一下Valve模型,其中客户端经常接收位置更新,而远程设备使用此数据上的插值来更新其位置。 寻找路径 在此模型中,认为用户发送了目的地,并且每个人都找到了目的地。 什么类型的游戏适合每种游戏,什么时候应该使用?

3
如何避免像素艺术运动中的“楼梯效应”?
我在精确的像素坐标处渲染精灵,以避免因抗锯齿而引起的模糊效果(精灵是像素艺术的,如果进行过滤,效果会很糟)。但是,由于对象的移动涉及可变的速度,重力和物理相互作用,因此轨迹以亚像素精度计算。 在足够大的屏幕空间速度(vΔt大于2或3像素)下,此效果很好。但是,当速度较小时,会出现明显的阶梯效应,尤其是沿对角线时。在非常慢的屏幕空间速度(v << 1像素/秒)下,这不再是问题,因此我只在寻找中等速度值的解决方案。 左图是通过简单舍入对象坐标获得的大速度绘制的轨迹。在中间,您可以看到当速度变小时会发生什么,以及我正在谈论的阶梯效应。在右边,我想获得的轨迹轨迹。 我对算法思想感兴趣,以便对轨迹进行滤波,以最大程度地减少混叠,同时保留大小速度下的原始行为。我可以访问Δt,即时位置和速度以及任意数量的先前值,但是由于它是实时模拟,所以我不知道将来的值(尽管如有必要,可以在某些假设下推断出估算值) 。请注意,由于物理模拟的缘故,方向突然改变也会发生。

6
用于插值和线程处理的数据结构?
我最近一直在处理游戏中的一些帧速率抖动问题,看来最好的解决方案是Glenn Fiedler(游戏开发人员)在经典的“ 修复您的时间步伐”中提出的解决方案!文章。 现在-我已经在使用固定的时间步进行更新。问题是我没有进行建议的插值渲染。结果是,如果渲染速率与更新速率不匹配,我将获得双倍或跳过的帧。这些可以在视觉上引起注意。 因此,我想在游戏中添加插值法-我很想知道其他人如何构建数据和代码来支持这一点。 显然,我将需要存储(在何处/如何?)与渲染器相关的游戏状态信息的两个副本,以便可以在它们之间进行插值。 另外-这似乎是添加线程的好地方。我想像一个更新线程可以在游戏状态的第三个副本上工作,而将其他两个副本保留为渲染线程的只读状态。(这是一个好主意吗?) 看来,有游戏的状态的两个或三个版本可能会引入性能和- 远更重要的是-可靠性和开发人员的生产力问题,相比于仅具有单一版本。因此,我对缓解这些问题的方法特别感兴趣。 我认为应该特别注意的是如何处理游戏状态中添加和删除对象的问题。 最后,似乎某种状态不是直接需要渲染的,还是要跟踪不同版本的状态太难了(例如,存储单个状态的第三方物理引擎)-因此,我想知道如何人们已经在这样的系统中处理了这类数据。


2
如何在两个向量之间线性插值?
我有一个速度矢量,我的客户在哪里,往哪里去,我有一个来自服务器的矢量,告诉客户应该在哪里。有时情况有所不同,因此我想在当前位置和服务器正确位置之间进行插值。 黑色箭头是客户端速度向量,红色箭头是服务器上的客户端速度向量,蓝色箭头是我要计算和插入的速度向量。 如何计算蓝色向量?那么,如何在它们之间进行线性插值?

3
在多人游戏中插值位置
为了节省多人游戏的带宽,我不会在每个服务器滴答声中更新每个对象,而是每个对象都有一个updateRate来告诉游戏该对象应在每个X服务器滴答声中进行更新。 当我收到某个对象的更新消息时,我会计算出我希望下次更新的时间: origin = serverCurrentPosition diff = serverNextPosition - origin arriveTime = now + timeBetweenTicks * updateRate 当我绘制对象时,我计算了到下一次更新为止的剩余时间,并据此插值位置: step = 100 / timeBetweenTicks * updateRate delta = 1 - step * ((arriveTime - now) / 100) position = origin + diff * delta 它可以工作...但是在图形中仍然有些抖动,尽管按照我的理论,每件事都可以解决,因为缩放应该照顾一些滞后,应该吗? 所以这里的问题是,这是最好的方法吗?我应该在计算中加入实际滞后吗?如果是这样,我该怎么做?我做了一些实验,但抖动只会变得更糟。

5
如何将Bresenham的线算法推广到浮点端点?
我正在尝试结合两件事。我正在写一个游戏,我需要确定与浮点端点在一条线上的网格正方形。 此外,我需要它包括它碰到的所有网格正方形(即不仅是布雷森纳姆的线条,而且是蓝色的线条): 有人可以向我提供有关该操作方法的任何见解吗?显而易见的解决方案是使用朴素的行算法,但是有没有更优化的东西(更快)?

3
为什么在Lerping函数中使用Time.deltaTime?
据我了解,两个值(之间的线性插值内插功能a和b使用第三值()t之间)0和1。在t = 0处返回值a,在处返回t = 1值b。值为0.5时,返回a与之间的中间值b。 (下图是一个平滑的步骤,通常是三次插值) 我一直在浏览论坛,在这个答案上,我找到了以下代码行:transform.rotation = Quaternion.Slerp(transform.rotation, _lookRotation, Time.deltaTime); 我对自己说:“真是个傻瓜,他不知道”,但是因为它有40多个投票,所以我尝试了一下,果然成功了! float t = Time.deltaTime; transform.rotation = Quaternion.Slerp(transform.rotation, toRotation, t); Debug.Log(t); 我之间的随机值0.01,并0.02为t。函数不应该相应地插值吗?为什么这些值会堆叠?我不明白勒普是什么意思?


4
像SmoothVideo Project所使用的那样,帧插值是否可以在不影响性能的情况下增加游戏的帧率?
SmoothVideo项目使用帧插值将视频的fps从24提高到60。结果非常令人印象深刻。我想知道这是否可以应用,在电子游戏中看起来是否不错? 与渲染所有帧相比,它使用的资源要少得多,因此在某种程度的折衷下,允许较低端的装备以更好的装备的质量进行渲染。我知道它不会那么精确,并且会稍稍增加输入等待时间,因为它需要保持最新的帧才能生成和插入内插的帧。不过,这还不如全帧那么糟糕,根据我的推理,仅滞后时间就是插值时间加上原始fps刷新时间的一半。因此,对于30 fps,这将是33ms / 2 +内插时间。 也许这种滞后将使其不适用于快速过去的第一人称游戏,但我怀疑这会在节奏较慢的游戏中成为障碍。 在较高的启动速度时,延迟会变小,因此,我认为从60fps到100 + fps时值得这样做,虽然会稍有增加,但仍会给系统带来极大的负担,但可以改善用户体验。

2
在两个联网状态之间插值?
我在客户端上模拟了许多实体(它们的速度以每帧为基础添加到它们的位置中),我让它们自己推算。他们发送有关上次被查看的地点及其速度变化的更新。效果很好,其他玩家也看到了这项工作。但是,一段时间后,这些播放器开始不同步。这是因为延迟。 我想知道如何在状态之间进行插值,以使它们看起来处于正确的位置。我知道玩家最后一次看到的位置以及他们当前的速度,但是插值到最后一次看到的状态会导致玩家实际向后移动。我根本不能对其他客户使用速度,而只是将它们“拖”向适当的方向,但是我认为这会引起锯齿运动。有哪些选择?

2
如何通过客户端预测处理实时随机运动
我正在构建一个实时多人游戏,该游戏在客户端和服务器上运行相同的“物理”循环。我使用的转向行为“徘徊”是必不可少的随机运动。运行漫游算法时,客户端和服务器生成不同的随机数。 我想知道如何保持自然随机的运动,但使用一些常数来确保客户端和服务器得出相同的结论。

2
插值实际上如何使物体的运动平滑?
在过去的8个月左右的时间里,我已经问过几个类似的问题,但并没有真正的高兴,所以我将使这个问题更笼统。 我有一个Android游戏,它是OpenGL ES 2.0。在其中,我有以下游戏循环: 我的循环以固定的时间步长原理工作(dt = 1 / ticksPerSecond) loops=0; while(System.currentTimeMillis() > nextGameTick && loops < maxFrameskip){ updateLogic(dt); nextGameTick+=skipTicks; timeCorrection += (1000d/ticksPerSecond) % 1; nextGameTick+=timeCorrection; timeCorrection %=1; loops++; } render(); 我的整合是这样的: sprite.posX+=sprite.xVel*dt; sprite.posXDrawAt=sprite.posX*width; 现在,一切都按我的意愿运行。我可以指定我想要一个对象在2.5秒内移动一定距离(例如屏幕宽度),并且它会做到这一点。同样,由于我在游戏循环中允许跳帧,因此我几乎可以在任何设备上执行此操作,并且总是需要2.5秒。 问题 但是,问题在于,当渲染帧跳过时,图形停顿。太烦人了。如果我取消了跳帧的功能,那么一切都会很顺畅,但是会在不同设备上以不同的速度运行。所以这不是一个选择。 我仍然不确定为什么会跳帧,但是我想指出的是,这与性能差无关,我将代码恢复为1个小的sprite,没有任何逻辑(除了移动精灵),但我仍然跳过帧。这是在Google Nexus 10平板电脑上使用的(如上所述,我需要跳帧以保持设备间的速度保持一致)。 因此,我唯一的选择是使用插值法(或外推法),我读过那里的每篇文章,但是没有一篇文章真正地帮助我了解它的工作原理,并且所有尝试的实现都失败了。 使用一种方法,我可以使事情顺利进行,但是这是行不通的,因为它弄乱了我的碰撞。我可以预见任何类似方法都会出现相同的问题,因为插值在渲染时传递给了渲染方法(并在其中起作用)。因此,如果Collision纠正了位置(角色现在正站在墙旁边),则渲染器可以更改其位置并将其绘制在墙中。 所以我真的很困惑。人们曾经说过,永远不要在渲染方法中更改对象的位置,但是所有在线示例都显示了这一点。 因此,我要求朝着正确的方向发展,请不要链接到流行的游戏循环文章(deWitters,Fix your timestep等),因为我已多次阅读这些文章。我不是要任何人为我编写代码。请简单地解释一下插值实际上如何与一些示例一起使用。然后,我将尝试将任何想法整合到我的代码中,并在需要时提出更具体的问题。(我确信这是很多人都在努力解决的问题)。 编辑 一些其他信息-游戏循环中使用的变量。 private long nextGameTick …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.