簡體   English   中英

box2d:沒有正確模擬的簡單示例

[英]box2d: simple example not simulating correctly

我是 box2d 的新手,並且正在按照在線教程之一將一些盒子放入場景並讓它們掉落。 項目代碼非常簡單:

在模擬循環之前,創建了一個世界並將一些框添加到場景中:

m_Physics = new Pistachio::Physics();

m_Physics->addBox(glm::vec2(0.0f, -90.0f), 0, glm::vec2(200.0f, 1.0f), false);
m_Physics->addBox(glm::vec2(0.0f, 0.0f), 0, glm::vec2(30.0f, 30.0f));
m_Physics->addBox(glm::vec2(30.0f, 40.0f), 0, glm::vec2(40.0f, 10.0f));

定義為:

Physics::Physics() {
    m_Gravity = b2Vec2(0.0f, -9.8f);
    m_PysicsWorld = new b2World(m_Gravity);
}

void Physics::addBox(const glm::vec2& position, float rotation, const glm::vec2& dimensions, bool dynamic) {
    m_Boxes.push_back(Box(m_PysicsWorld, position, rotation, dimensions, dynamic));
}

Box::Box(b2World* world, const glm::vec2& position, float rotation, const glm::vec2& dimensions, bool dynamic) {
    m_Width = dimensions.x;
    m_Height = dimensions.y;
    // make body
    b2BodyDef bodyDef;
    bodyDef.type = (dynamic) ? b2_dynamicBody : b2_staticBody;
    bodyDef.position.Set(position.x, position.y);
    bodyDef.angle = rotation;
    bodyDef.fixedRotation = false;
    m_Body = world->CreateBody(&bodyDef);

    // make fixture
    b2PolygonShape boxShape;
    boxShape.SetAsBox(m_Width / 2.0f, m_Height / 2.0f);
    b2FixtureDef fixtureDef;
    fixtureDef.shape = &boxShape;
    fixtureDef.density = (dynamic) ? 1.0f : 0.0f;
    fixtureDef.friction = 0.5f;
    fixtureDef.restitution = 0.1f;
    fixtureDef.restitutionThreshold = 0.5f;
    m_Fixture = m_Body->CreateFixture(&fixtureDef);
}

這些盒子能夠以正確的位置和大小正確地添加到世界中。 然后在模擬循環中,世界執行步進模擬並為盒子發出一些繪制調用。

void Sandbox2D::OnUpdate(Timestep ts) {

// step simulate world
m_Physics->getWorld()->Step(1/60.0f, 6, 2);

// Update
m_CameraController.OnUpdate(ts);

// draw calls
Renderer2D::BeginScene(m_CameraController.GetCamera());

for (int i = 0; i < 3; i++) {
    m_Physics->getObjectByIndex(i).Draw({ 0.2f, 0.8f, 0.3f, 1.0f });
}

Renderer2D::EndScene();

}

一切都可以運行,兩個動態類型的盒子會掉在靜態地面上,但是它們的碰撞和物理模擬不正確。 接觸點位置潮濕,由於碰撞,盒子似乎無法正確旋轉。 他們也移動得很慢。

兩個盒子從高處掉下來,但物理不能正常工作

我認為這是一個非常簡單的演示,但我沒有做對。 設置 box2d 時還有什么需要注意的嗎?

沒關系。 弄清楚了...

一定要檢查你的角度,它們應該是弧度而不是度數......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM