标签: physics-engine

通过设置关联性在单核上运行多线程程序的性能?

简而言之:

在什么情况下可以在单个核心上运行多线程应用程序破坏性能?

如何将多线程应用程序的亲和力设置为仅使用一个核心?

长期:

我正试图在它自己的线程上运行2D引擎的物理特性.它起作用,并且起初表现似乎正常,但我决定告诉游戏尝试以10K FPS运行并且物理速度为120FPS,进入任务管理器并将亲和力设置为程序只能使用一个核心.

在将亲和力设定为一个核心之前,FPS在~1700,然后达到~70FPS.我没想到那种减少.我告诉游戏尝试以300 FPS和60FPS的物理速度运行.

同样的事发生了.

我没有多想,所以我只是继续修改引擎.我在更改了一些绘图代码,300 FPS,60FPS物理后再次测试了它.允许所有核心管理300FPS就好了,单核FPS的亲和力下降到4.现在我知道在单核上运行多线程应用程序可能不是那么糟糕,或者我不知道发生什么时发生的事情您将亲和力设置为单个核心.

这是关于渲染/物理运行的方式......

循环开始

收集输入直到(1.0/FPS)过去.

致电更新.

锁定物理线程互斥体,因为游戏中的东西将使用物理数据,我不希望引擎更新任何内容,直到此更新调用中的所有内容都完成.

更新游戏中的所有内容,可以将渲染功能对象(包含绘制内容,绘制位置,如何绘制)发送到渲染队列.

解锁互斥锁.

渲染器在每个函数对象上调用operator()并将其从队列中删除.

更新屏幕.

重复循环.

物理线程循环:

    ALLEGRO_TIMER* timer(al_create_timer(1.0f / 60.0f));
    double prevCount(0);

    al_start_timer(timer);
    while(true)
    {
        auto_mutex lock(m_mutex);

        if(m_shutdown)
            break;
        if (!m_allowedToStep)
            continue;
                    // Don't run too fast. This isn't final, just simple test code.
        if (!(al_get_timer_count(timer) > prevCount))
            continue;

        prevCount = al_get_timer_count(timer);

        m_world->Step(1.0f / 60.0f, 10, 10); 
        m_world->ClearForces();

    }
Run Code Online (Sandbox Code Playgroud)

//注意:Auto mutex只是我创建的一个非常简单的对象,用于在构造函数中锁定互斥锁并在析构函数中解锁它.我正在使用Allegro 5的线程功能.

multithreading mutex affinity allegro5 physics-engine

4
推荐指数
1
解决办法
3406
查看次数

模拟骨骼中肌肉的收缩

使用球形节点,圆柱形骨骼和锥形扭曲约束,我设法在3维中创建一个简单的骨架.我正在使用子弹物理库的分支(@chandlerprall的physijs,以及threejs).

现在我想补充肌肉.在过去的两天里,我一直试图获得某种滑动约束或通用6自由度约束,以使肌肉能够收缩并将两个节点拉向彼此.

我得到各种疯狂的结果,我开始认为我会以错误的方式解决这个问题.我不认为我可以简单地使用两个锥形扭曲约束,然后沿着其长度轴缩放肌肉,因为缩放碰撞网格显然相当昂贵.

我需要的只是一个"肌肉",它可以连接到两个节点并"收缩"以拉入其两个节点.

任何人都可以提供一些关于如何使用子弹引擎(或者真的,任何物理引擎)最好地解决这个问题的建议吗?

编辑:如果我不需要肌肉发生碰撞怎么办?说我只需要一个约束2个节点的视觉肌肉: 建立 这两个节点线性约束到肌肉碰撞网格,它不是一个大的网格,只是一个小的,只有在那里保持视觉肌肉的几何形状,并提供一个轴约束节点.

然后,我可以使用滑动约束附带的线性马达沿轴移动节点.任何人都可以看到这个问题吗?我最初的问题是较小的碰撞网格有点不稳定,似乎在整个地方移动......

game-physics bulletphysics physics-engine three.js

4
推荐指数
1
解决办法
808
查看次数

如何做出物质的最小例子?js有效吗?

我正在尝试使用这个问题.物理库.我正在使用他们的"入门"教程,但它无法找到画布.

这是我的HTML:

<html>
<head>
<meta charset="UTF-8">
<title>Physics test</title>
</head>
<script type="text/javascript" src="./lib/matter-0.8.0.js"></script>
<script type="text/javascript">
// Matter.js module aliases
var Engine = Matter.Engine,
    World = Matter.World,
    Bodies = Matter.Bodies;

// create a Matter.js engine
var engine = Engine.create(document.body);

// create two boxes and a ground
var boxA = Bodies.rectangle(400, 200, 80, 80);
var boxB = Bodies.rectangle(450, 50, 80, 80);
var ground = Bodies.rectangle(400, 610, 810, 60, { isStatic: true });

// add all of the bodies to …
Run Code Online (Sandbox Code Playgroud)

javascript html5 canvas physics-engine

4
推荐指数
1
解决办法
4729
查看次数

我的代码PhysicsRemoveExample.java(AndEngine)有什么问题?

试着PhysicsRemoveExample.java这里做例子.

程序启动时我收到此消息:

Sorry! The application PhysicsRemoveExample(process org.anddev.andengine.PhysicsRemoveExample) has stopped unexpectedly. Please try again.
Run Code Online (Sandbox Code Playgroud)

我已经构建路径andengine.jarandenginephysicsbox2dextension.jar assets/gfx -> face_box_tiled.pngface_circle_tiled.png.

这是我的Java代码PhysicsRemoveExample.java.与示例中的相同,但我已更改为extends BaseGameActivity.

package org.anddev.andengine.PhysicsRemoveExample;

import org.anddev.andengine.engine.Engine;
import org.anddev.andengine.engine.camera.Camera;
import org.anddev.andengine.engine.options.EngineOptions;
import org.anddev.andengine.engine.options.EngineOptions.ScreenOrientation;
import org.anddev.andengine.engine.options.resolutionpolicy.RatioResolutionPolicy;
import org.anddev.andengine.entity.primitive.Rectangle;
import org.anddev.andengine.entity.scene.Scene;
import org.anddev.andengine.entity.scene.Scene.IOnAreaTouchListener;
import org.anddev.andengine.entity.scene.Scene.IOnSceneTouchListener;
import org.anddev.andengine.entity.scene.Scene.ITouchArea;
import org.anddev.andengine.entity.scene.background.ColorBackground;
import org.anddev.andengine.entity.shape.Shape;
import org.anddev.andengine.entity.sprite.AnimatedSprite;
import org.anddev.andengine.entity.util.FPSLogger;
import org.anddev.andengine.extension.physics.box2d.PhysicsConnector;
import org.anddev.andengine.extension.physics.box2d.PhysicsFactory;
import org.anddev.andengine.extension.physics.box2d.PhysicsWorld;
import org.anddev.andengine.input.touch.TouchEvent;
import org.anddev.andengine.opengl.texture.Texture;
import org.anddev.andengine.opengl.texture.TextureOptions;
import org.anddev.andengine.opengl.texture.region.TextureRegionFactory;
import org.anddev.andengine.opengl.texture.region.TiledTextureRegion;
import …
Run Code Online (Sandbox Code Playgroud)

java android physics-engine andengine

3
推荐指数
1
解决办法
5924
查看次数

如何在box2d中实现更好的时间步长(固定或半固定)?

我想知道是否有人可以帮助我理解在box2d中修复我的时间步骤.我试图通过实施更好的时间步骤(我目前使用内置的可变时间步骤)来改进我刚刚发布的Bounce Z Ballz游戏.我一直在阅读一些有用的信息,但我无法真正掌握类似于内置的cocos2d/box2d模板的东西,就像Glenn Fiedler的解决方案.

TL; DR(我想将我的cocos2d/box2d游戏时间步长从内置的可变时间步骤更改为更一致的内容)

谢谢,

史蒂夫

cocos2d-iphone box2d-iphone physics-engine

3
推荐指数
1
解决办法
2557
查看次数

有没有办法在Box2D中绘制凹面多边形并检测与其他形状的碰撞

我是Box2D物理引擎的初学者。当我具有不规则曲线的图像时,我正在尝试开发多边形。但是参考了使用Vertex Helper的Raywenderlich演示教程的参考,我正在绘制多边形,但是在很多情况下,它会产生凹面多边形,而当我执行我的Project时,它会崩溃..因此,如果可以得到凹面用法的一些帮助多边形会很棒。

任何帮助或建议表示赞赏。谢谢

polygon box2d-iphone physics-engine ios

3
推荐指数
1
解决办法
1810
查看次数

Bullet Physics Rigid Body从表面反弹

我为我的游戏编写了一个玩家控制器,它使用刚体给玩家物理.我将恢复原状和摩擦设置为0,将质量设置为80.我的地形具有完全相同的属性,只是质量也是0.每当玩家从高处坠落时,它会在地形表面上反弹几次.这不是我希望我的玩家做出反应的方式.有没有办法防止这种行为?

这是一个说明我的问题的视频.它有点滞后,因为我使用QuickTime录制它,但它应该得到重点.

http://www.youtube.com/watch?v=2eQ1cj7hpWw

c++ game-physics bulletphysics physics-engine

3
推荐指数
1
解决办法
3001
查看次数

Matter.js:在对象上添加一个Bounce属性

我正在使用Matter.js,一个javascript物理引擎,在一个简单的游戏中拥有一个弹力球.在他们的API上看来,Matter可能没有属性来改变对象的弹性.有谁知道我如何实现这个?

javascript physics-engine

3
推荐指数
1
解决办法
2155
查看次数

如何使用Bullet Physics进行弹簧约束?

我想测试子弹物理的春季约束。因此,我创建了一个悬停在地面上方的静态框,并将第二个动态框悬于其下。但是激活弹簧行为无济于事!盒子确实可以自由悬挂。我知道是因为它可以自由旋转。但它不会振荡或发生任何变化。

btCollisionShape *boxShape = createBoxShape(0.2f, 0.2f, 0.2f);

btRigidBody *box1 = createStatic(boxShape);
btRigidBody *box2 = createDynamic(1.0f /*mass*/, boxShape);

box1->setWorldTransform(btTransform(btQuaternion::getIdentity(), { 0.0f, 2.0f, 1.0f }));
box2->setWorldTransform(btTransform(btQuaternion::getIdentity(), { 0.0f, 1.0f, 1.0f }));

btGeneric6DofSpring2Constraint *spring = new btGeneric6DofSpring2Constraint(
    *box1, *box2,
    btTransform(btQuaternion::getIdentity(), { 0.0f, -1.0f, 0.0f }),
    btTransform(btQuaternion::getIdentity(), { 0.0f,  0.0f, 0.0f })
);

// I thought maybe the linear movement is locked, but even using these lines do not help.
// spring->setLinearUpperLimit(btVector3(0.0f,  0.1, 0.0f));
// spring->setLinearLowerLimit(btVector3(0.0f, -0.1, 0.0f));

// Enabling the spring …
Run Code Online (Sandbox Code Playgroud)

c++ bullet bulletphysics physics-engine

3
推荐指数
1
解决办法
1262
查看次数

现实两足骨架的物理模拟

我希望利用子弹物理或类似的物理引擎来创建一个逼真的骨架模拟人体样的两条腿.也就是说,在两条"腿"的顶部创建一个由圆形质量制成的"身体"模拟,其中每条腿由3个实心连接,通过3个关节连接,每个关节具有一定的自由度和有限的移动范围.每个方向,类似于人体臀部,膝盖和脚踝.

我的目标是一个真实的模型,因此只有当所有关节都正确平衡时它才会"站立",否则它将会下降.

任何有关现有教程或资源的指示,建议或指示都表示赞赏!这看起来像是从头开始做的大量工作......

simulation physics game-physics bulletphysics physics-engine

2
推荐指数
1
解决办法
5156
查看次数