过去几周我一直在使用Open Dynamics Engine(ODE)并取得了巨大的成功.它有一个非常简单的API,它的模拟至少看起来很逼真.(我有时想知道我的碰撞关节参数,但无论如何.)
我唯一的抱怨是它有时候是一只狗.如果我天真地模拟1000个相互作用的身体,那么我的表现开始潜水.
我知道我可以花时间使用空间网格来减少碰撞系统的负载,但在我调整代码以使用ODE之前,我想知道是否还有其他开源/自由物理引擎值得一看在.这将是一个商业应用程序,所以我正在寻找一些比一些大学生的周末项目更坚实,更实战的测试.
我正在寻找一个轻量级的纯Java物理引擎来为机器人运动控制做一些模拟.
我的要求:
您是否可以推荐任何适合该法案的现有库,而不是重新发明轮子?
ps我已经使用Google搜索了 - 我只是希望得到已经使用或实施此类内容的人的诚实意见!
我目前正在为物理引擎(Hobby项目)编写KDTree.
KDTree不包含点数.相反,它包含Axis Aligned边界框,它绑定环境中的不同对象.
我的问题是决定如何在KDTree节点满了时拆分它们.我正在尝试2种方法:
方法1:始终将节点在最大轴上精确地分成两半.
方法2:查找包含对象的节点区域.拆分平面上的节点,该节点将该区域在其最大轴上分成两半.示例 - 如果所有对象都集中在节点的底部,则它按长度方式分割,从而将底部分成两部分.
所以我在这里寻找的是分割我的KD-Tree节点的更好方法.考虑到这将是一个物理引擎,决策需要足够简单,以便实时进行.
我正在尝试实现2维n体仿真的OpenMP版本.
但是存在一个问题:我假设每个粒子的初始速度和加速度都为零.当颗粒首先聚集在一起时,它们会高速分散,不再聚集.
这似乎与牛顿法不一致,对吧?
有人可以解释为什么会发生这种情况以及如何解决错误?
这是我的代码的一部分:
/* update one frame */
void update() {
int i, j;
omp_set_num_threads(8);
# pragma omp parallel private(j)
{
# pragma omp for schedule(static)
for ( i = 0; i < g_N; ++i ) {
g_pv[i].a_x = 0.0;
g_pv[i].a_y = 0.0;
for ( j = 0; j < g_N; ++j ) {
if (i == j)
continue;
double r_2 = pow((g_pv[i].pos_x - g_pv[j].pos_x),2) + pow((g_pv[i].pos_y - g_pv[j].pos_y),2);
g_pv[i].a_x += (-1) * G * g_pv[j].m …Run Code Online (Sandbox Code Playgroud) 我正在使用Matter.js物理来创建柔体.我能够创建这样的身体:
但是我不确定这是否是我想要的"软体".确实,这个身体并不是完全僵硬的,并且当它碰撞并被拖拽时具有那种有弹性的感觉.我正在寻找一个与凝胶有相似之处的身体.此图像可能在视觉上有助于解释概念:
我想知道如何制作这些类型的尸体.它与as matter.js软体相同,但具有非常特殊的属性类型吗?我只能让身体变得僵硬,而不是像我希望的那样可塑造和圆形.
我也很有兴趣通过游戏中的相互作用操纵物理体,这会增加或减少物理体的大小,这使我再次得出结论,我想要的身体类型必须是相当可塑的.
may.js可以处理这个还是我必须更改物理引擎?任何接近这个的解决方案?
注意:我使用Phaser.js作为一些游戏中的组件,但是物理操作的物理问题是物理操作,因为我相信Phaser集成的物理学不能模拟这种类型的复杂体.
谢谢
编辑:它非常类似于这个Box2d:滚动软体球.我想我只需要使用js引擎.有没有?
我有一个我正在研究的游戏中有导弹的导弹.此刻他们只是转向他们的目标,这会产生一个相当愚蠢的结果,所有的导弹跟随目标.
我想创造一种更致命的导弹风格,它将瞄准目标"将会到达那里"的位置,我对如何做到这一点感到有些困惑和困惑.
我猜我将需要在未来的某个时刻确定我的目标(无论如何都是猜测),但我无法理解未来的发展方向.它需要基于导弹远离目标的距离,但目标也在移动.
我的导弹具有持续的推力,同时具有较弱的转向能力.希望是他们会快速而令人兴奋,但是像牛一样操纵(即,对于非HitchHiker球迷来说非常糟糕).
无论如何,Stack Overflow似乎是一个有趣的问题,可以帮助我解决,所以任何关于更好或"更有趣"的导弹的想法或建议都会感激不尽.
接下来将是AI躲避他们......
所以,我正在尝试对我的SAT,Circle - Poly,Poly - Poly碰撞应用响应.我将这篇文章的代码移植到JavaScript:
http://rocketmandevelopment.com/blog/separation-of-axis-theorem-for-collision-detection/
现在,检测适用于所有类型,但响应失败并且以疯狂的速度和错误的角度,它不依赖于物体的质量(区域^ 2而不是质量)并且未应用角速度
JSFiddle(重力不适用于模拟,使用箭头键移动),JS的第一部分是Vectors,然后是Physics,然后是Main.
这是我对形状的定义:(必须为"JSFiddle"链接添加一些代码:P)
var Circle = function(body, c, r, cor, cof) {
this.body = body // Static or dynamic
this.c = c; // Center
this.r = r; // Radius
this.m = getCMass(r); // Mass = Area
this.v = new Vector(); // Velocity
this.cor = cor; // Coefficient of restitution
this.cof = cof; // Coefficient of friction
this.a = 0; // Angle
this.av = 0; // Angular velocity
this.type …Run Code Online (Sandbox Code Playgroud) 我知道这行不通,因为我试过了:
if $r ~~ BearingTrue || CompassAdj || CourseAdj { nextsame };
但是 - 是否有一种简洁、简洁和易读的方式在一行上进行多个 Type智能匹配,而不必扩展到给定/何时或 if/else 结构?
任何人都可以指向我的2D游戏物理库,以便为2D平台/侧滚游戏编程引力,跳跃动作等吗?或者你能为马里奥,声波等侧卷轴推荐一些算法吗?
我想建立一个游戏来学习cocos2d.Lunar lander是我脑海中的第一个练习.任何指针/源代码/所需的物理计算教程将不胜感激.谢谢!
physics ×10
c++ ×2
game-physics ×2
javascript ×2
open-source ×2
simulation ×2
algorithm ×1
collision ×1
iphone ×1
java ×1
kdtree ×1
matterjs ×1
openmp ×1
raku ×1
trigonometry ×1
vector ×1