Questions tagged «physics»

与物体在空间和时间上的运动有关。包括诸如加速度(推力和重力),质量,碰撞响应,摩擦等概念。

1
二维水模拟的想法
我正在寻找相对于一个较大的(称为)阻塞/非阻塞数组(从侧面观察)在2D中模拟水的任何输入。我提出了以下想法: 细胞自动机 使用单元自动机在CPU上进行大规模并行仿真。使用简单的规则: 如果底部有一个开放的单元,则移至该单元。 检查左侧和右侧的单元格,从两个单元格中随机选择一个并移至该单元格。 优点 易于实现。 在多人游戏系统中有意义/确定性。 缺点 可能真的很慢。 不令人信服。 GPU上的流体动力学 针对如下所示的纹理在GPU上执行流体动力学的粗略近似: +------+-----+-----+-------+ |R |G |B |A | +------+-----+-----+-------+ |vX |vY |NULL |Density| +------+-----+-----+-------+ 优点 可能真的很快。 可能非常令人信服。 另一个像素着色器可以直接渲染它。 缺点 难以实施。 难以调整。 我无法为我的水平分配单个纹理。 我可以重叠网格区域,但这会增加进一步的复杂性。 粒子 使用粒子模拟水。在使用添加混合进行渲染的过程中,然后将乘法函数应用于Alpha通道以赋予水脆边缘。 优点 可能看起来不错。 易于实现。 易于渲染。 尽管在多人游戏系统中需要大量的带宽才能传输,但这仍然有意义。 缺点 粒子间的影响可能会很慢(邻居查找)。 可能导致水通过实心空间“漏出”(因为实心空间很小,例如1px)。 根据颗粒大小,可能导致水中出现奇怪的孔。 可以通过允许粒子比实际大小更靠近一起漂移来缓解上述两种情况,但是这会导致粒子间和粒子/横向性能出现问题。 还有其他想法吗? 注意:这是一个近似值,我在这里不是在寻找物理上正确的水-只是“足够好”的东西(快速和肮脏的加分点)。该游戏是多人游戏,因此不幸的是,整个关卡需要不断进行模拟。

4
如何使用Unity将玩家的移动限制在3D对象的表面?
我正在尝试创建类似于Mario Galaxy或Geometry Wars 3的效果,其中当玩家绕过“行星”时,重力似乎会调整,并且不会像重力一样从物体边缘掉落固定在一个方向上。 (来源:gameskinny.com) 我设法通过一种方法实现了与我要寻找的目标相近的方法,即应具有重力的物体将其他刚体吸引到该物体上,但是通过使用Unity的内置物理引擎,通过AddForce等进行运动,我只是无法让运动感觉正确。在没有开始从物体表面飞出的情况下,我无法使玩家足够快地移动,并且我无法找到施加的力和重力之间的良好平衡来适应这一点。我当前的实现是对这里发现的内容的改编 我觉得该解决方案可能仍会使用物理方法将播放器固定在物体上(如果他们要离开表面),但是一旦将播放器接地,便可以通过一种方法将播放器固定在表面上并关闭物理并通过其他方式控制播放器,但我不确定。 我应该采取哪种方法将播放器捕捉到物体表面?请注意,该解决方案应该在3D空间(而不是2D)中工作,并且应该能够使用Unity的免费版本实现。
16 unity  physics  control 

1
在不平坦的行星表面上寻路
我的问题是在不平坦的行星表面上寻路的最佳方法是什么? 背景资料 我通过位移映射6个球面投影平面创建了一个行星。这些平面在投影为球形之前先形成一个立方体。 我想知道是否可以将每个“球面投影的立方体面”用作网格并使用简单的A *算法来找到最佳的可能路线,我也希望考虑位移高度,以便该路径避免爬升山脉等(我想这只是A *算法中的一种启发法)。另一个考虑因素是,我通过利用Unity3d的物理引擎实现了行星运动,将重力应用于行星中心。我提出的解决方案是否需要对重力运动进行独立控制。 为了更好地阐明我的问题,这是我目前的行星体:

1
故意造成不精确的复古/ NES风格物理学
背景: 我在为我的复古Platformer重制项目获得正确的跳跃曲线时遇到问题。原始游戏适用于NES,玩家的速度存储在两个独立的部分中:一个字节代表整数,另一个字节代表小数部分。 重力以0.25 /帧的速率添加到播放器的Y速度。 玩家跳跃时,其Y速度设置为-4.64453125。其余的跃迁曲线留给重力。 随着玩家的上升,他的垂直速度以0.25 /帧的速率收敛到0。但是,当玩家的速度达到小于零的值时,速度会按照不同的模式变化。它遵循以下模式,而不是每帧稳定减少0.25: [1.75, -0.25, -0.25, -0.25, 1.75, -0.25, -0.25, -0.25, 1.75, ...] 它似乎与整数溢出有关。 数据: 这是原始数据的转储。这是速度表。 Jump Curve Y-Hi Y-Lo Decimal Change/Frame 4 165 4.64453125 ? 4 101 4.39453125 -0.25 4 37 4.14453125 -0.25 3 229 3.89453125 -0.25 3 165 3.64453125 -0.25 3 101 3.39453125 -0.25 …

6
您如何并行化二维Boids模拟
您如何以这样的方式编写2D boids仿真程序,使其可以使用来自不同来源(群集,gpu)的处理能力。 在上面的示例中,无色粒子四处移动,直到它们聚集(黄色)并停止移动。 问题是,尽管左上方的实体不太可能与右下方的实体进行交互,但所有实体都可能彼此交互。如果将域划分为不同的段,则可能会加快整个过程的速度。但是,如果实体希望跨入另一个段,则可能会出现问题。 目前,该仿真可用于具有良好帧速率的5000个实体,如果可能,我想尝试使用数百万个实体。 可以使用四叉树进一步优化吗?还有其他建议吗?

4
RTS本地回避如何完成?
当前,我正在模拟物理冲击力以局部避开单位,但是这种方法有时会将单位推离地层,并且当单位结块时会产生非常不利的影响。 对于像《星际争霸2》这样的RTS游戏,如何进行局部回避?是物理模拟还是全能控制器决定一切应该在哪里?我知道这个问题可能有点笼统,所以我专门问如何实现《星际争霸2》的局部回避行为。尽管任何有效的方法都将不胜感激。 我不是在寻找任何代码-只是有用的资源或有关Starcraft 2(或类似游戏)如何处理本地回避的解释。 目前,我已经实现了碰撞检测(带有穿透向量),碰撞力和速度移动。检查每个单元是否相互碰撞-如果它们发生碰撞,则物体会立即被渗透矢量偏移,然后施加碰撞力。然后,另一个循环按其速度移动对象,并将阻力施加到该速度。偏移减轻了施加在结块单元上的过大碰撞力的问题,但是单元有时仍会射出。 我正在寻找的解决方案需要满足以下要求(例如在Starcraft 2中): 对象不会重叠;至少必须解决重叠问题。 物体不会将彼此推开超过必要的距离,因此2个单位可以在一个编队中直立并相互靠近。 当对象聚集到同一目的地时,不应有任何奇怪的行为。 可以支撑不同尺寸甚至不同凸面形状的单元。 到目前为止,我一直在思考的不是检测冲突,而是检测将来的冲突,这样就不会发生重叠。然后应用约束,确保2个单位的速度不会导致它们重叠。我仍然在修改限制重叠之外的移动的算法。

2
2D行星重力
我正在尝试制作一个简单的游戏,其中发射一艘太空船,然后其路径受行星的重力影响。 类似于该游戏:http : //sciencenetlinks.com/interactives/gravity.html 我想知道如何在此游戏中复制行星对宇宙飞船的影响,以便宇宙飞船可以“环绕”行星以改变方向。 我设法取得了一些伪造的结果,其中宇宙飞船在行星周围绕着一个巨大的椭圆形循环,或者使用Vectors仅受行星重力的影响很小。 提前致谢。 PS:我有丰富的编码经验,与游戏开发者无关。
15 2d  physics 

3
从哪里开始实施车辆物理?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为Game Development Stack Exchange 的主题。 6年前关闭。 我自己的一点背景。我对诸如Havok,Box2D,Bullet等第三部分物理引擎有相对丰富的经验,并已成功将它们集成到自定义引擎中。我还通过阅读一些已知的书来制作了一个简单的物理引擎。 现在,我有兴趣研究车辆物理。有几本书略过了这个主题,但是没有详细介绍,我无法掌握任何有用的内容。因此,我想知道一些不错的书籍/资源,这些书籍/资源不太繁重(这是指一本纯粹的车辆,是为工程师而非游戏开发人员制作的书),可帮助我开始进行车辆物理研究。在这里get started=至少指导我通过在大多数游戏中(暂停/传输等)发现的具有现代功能的3D模型创建简单的载具 注意:我搜索了类似的问题,但未找到问题,但如果存在,请发布链接并随时关闭问题。
15 physics  books  racing 


3
固体作为高粘度液体
我和我的一个朋友正在讨论不同的想法,即允许以一种非常零散的方式销毁世界上的材料,他提出了将固体表示为非常明显的流体的想法。我的直觉是,这可能是:A)非常困难,或者B)资源密集,但是我不确定。 这样的模型对于RPG /冒险rpg / fps是否可行? 编辑:澄清:这个想法是要由该系统处理碰撞和破碎的对象。基本上允许以这种方式处理的任何对象都是可破坏的,而不是使用脚本化可破坏对象。

4
如何计算由反弹摩擦引起的旋转?
接下来是我的上一个问题:我很实际地将球从击中的表面弹起。现在我想使它从打击的摩擦中旋转。 演示起来很简单:我在每个刻度上以球的角速度旋转球,并在渲染时应用相同的旋转。 当球撞到墙壁时,我知道旋转速度受... 击球时球的初始速度 球与表面的摩擦系数(物理常数) 的入射角(球的进向速度矢量与表面法线之间的角度)。 入射角由球的撞击速度和出口速度向量的点积近似得出。(1表示高自旋,-1表示无自旋,其他所有相对而言) 将以上所有内容相乘,并确保将它们转换为0-1,然后乘以最大旋转速度,球似乎在旋转速度方面达到了预期。除了一件事:它总是沿顺时针方向旋转(因为正值)。 这是个好方法吗?您能想到一个更简单的方法吗? 如果此方法看起来不错,我会缺少什么?我怎么知道什么时候球应该逆时针旋转?

3
实际汽车的典型最大转向角
我正在Unity3D中构建汽车模拟。我正在尝试将汽车的属性设置为尽可能逼真的。我似乎无法在Google上得到直接的答案,所以我想到了在这里提问。 普通乘用车的典型最大转向角是多少?

5
为什么整合过度积累?
我开始学习如何进行DIY物理学,并且我有一个关于在最基本的层面上实现集成的问题(即,这不是 Euler vs. RK4问题)。 我遇到的几乎每个示例都具有一些integrate()功能,该功能获取自上次更新以来的时间步长,并自上次更新以来更新加速度(和/或速度和/或位置)。 最简单的形式: position += velocity * deltaTime 但是,我不明白为什么通过更改功能就可以很容易地获得这样的积累。例如:getPosition = makeNewFunction()可以返回带有签名的东西Time -> Position,并且该函数的内部工作是通过适当的数学公式生成的。 这样,就没有积累……只要需要获取位置,它就会在当前时间调用该函数。 我的新手理解是,这样做还可以避免由于累积而产生的错误……那为什么不起作用,我还缺少什么? (之前我确实整理了这个想法的基本概念证明,尽管它同时也在测试其他一些东西,所以它不是最干净的例子:https : //github.com/dakom/ball-bounce-frp) 编辑1:如评论中所述,可能很重要的一点是要指出,我还没有学会改变加速度,或者处理急动和其他需要比恒定加速度更高阶积分的事情。 编辑2:这是该思想的一些基本示例代码,以及伪javascript语法-注意,getKinematicPosition由于部分应用,因此它返回的只是时间->位置的新功能: 我会坚持在这里工作,但可能还有其他原因,例如getVelocity,我想... getKinematicPosition = initialVelocity => acceleration => time => ((.5 *acceleration) * (time * time)) + (initialVelocity * time); getPosition = getKinematicPosition ([0,0,0]) (GRAVITY); onTick = totalTime …

3
碰撞检测是否总是O(n ^ 2)?
物理引擎是否能够例如通过将彼此靠近的对象分组并检查该组内部而不是与所有对象的碰撞来降低复杂性?(例如,可以通过查看远处物体的速度和与其他物体的距离来将其从一个组中移除)。 如果不是,那么这对于球体(在3d中)或圆盘(在2d中)是否会使碰撞变得微不足道?我应该做一个双循环,还是创建一个成对的数组? 编辑:对于子弹和box2d之类的物理引擎,碰撞检测是否仍为O(N ^ 2)?

3
解决力量冲突
在我的2D物理引擎中,我可以检测到AABB与AABB碰撞,并通过找到最短的穿透矢量并将其添加到AABB的位置来解决它们。 这样做可以将“第一” AABB“推”到第二AABB之外,但根本不处理速度/加速度变化。 如果我在仿真中添加重力加速度,则即使第一动态ABB停在第二静态ABB的顶部,它的速度也会保持增长。最终,速度将变得太大而无法检测到碰撞(动态AABB将落入静态ABB)。 我尝试将分辨率后的速度设置为零,但显然效果不佳,并创建了不切实际的模拟。 我在线阅读了通过手动处理位置或速度不正确来解决冲突的信息。我尝试过实施力量(目前,质量是“硬编码” 1): void Body::applyForce(sf::Vector2f mForce) { acceleration += mForce; } void Body::integrate(float mFrameTime) { velocity += acceleration * mFrameTime; position += velocity * mFrameTime; acceleration = {0, 0}; } 如果我在冲突解决期间将最短的穿透向量用作力,则动态AABB将从静态AABB中“弹出”,但在没有重力的情况下其速度永远不会降低,并且将永远移动。 有没有办法施加“临时”力量?一种将第一个ABB推出第二个ABB的力,然后在该AABB不再碰撞时停止作用? 完整的源代码在这里:https : //github.com/SuperV1234/SSVSCollision

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.