diff --git a/core/src/objects/workspace.cpp b/core/src/objects/workspace.cpp index d669b45..5f31132 100644 --- a/core/src/objects/workspace.cpp +++ b/core/src/objects/workspace.cpp @@ -35,6 +35,8 @@ void Workspace::InitService() { // world->setContactsPositionCorrectionTechnique(rp3d::ContactsPositionCorrectionTechnique::BAUMGARTE_CONTACTS); physicsWorld->setNbIterationsPositionSolver(2000); physicsWorld->setNbIterationsVelocitySolver(2000); + // physicsWorld->setSleepLinearVelocity(10); + // physicsWorld->setSleepAngularVelocity(5); // physicsWorld->setEventListener(&eventListener); @@ -61,17 +63,22 @@ void Workspace::SyncPartPhysics(std::shared_ptr part) { rp::BoxShape* shape = physicsCommon->createBoxShape(glmToRp(part->size * glm::vec3(0.5f))); - if (part->rigidBody->getNbColliders() > 0) { + if (part->rigidBody->getNbColliders() > 0) part->rigidBody->removeCollider(part->rigidBody->getCollider(0)); - } - if (part->rigidBody->getNbColliders() == 0) - part->rigidBody->addCollider(shape, rp::Transform()); + part->rigidBody->addCollider(shape, rp::Transform()); part->rigidBody->setType(part->anchored ? rp::BodyType::STATIC : rp::BodyType::DYNAMIC); part->rigidBody->getCollider(0)->setCollisionCategoryBits(0b11); - float density = 1.f; - part->rigidBody->setMass(density * part->size.x * part->size.y * part->size.z); + rp::Material& material = part->rigidBody->getCollider(0)->getMaterial(); + material.setFrictionCoefficient(0.35); + material.setMassDensity(1.f); + + //https://github.com/DanielChappuis/reactphysics3d/issues/170#issuecomment-691514860 + part->rigidBody->updateMassFromColliders(); + part->rigidBody->updateLocalInertiaTensorFromColliders(); + + // part->rigidBody->setMass(density * part->size.x * part->size.y * part->size.z); part->rigidBody->setUserData(&*part); } diff --git a/editor/mainwindow.cpp b/editor/mainwindow.cpp index 850bc32..8efb439 100644 --- a/editor/mainwindow.cpp +++ b/editor/mainwindow.cpp @@ -155,7 +155,7 @@ MainWindow::MainWindow(QWidget *parent) auto part0 = ui->mainWidget->lastPart; gWorkspace()->AddChild(ui->mainWidget->lastPart = Part::New({ - .position = glm::vec3(1.6691498, 0.82489049, -0.73040605), + .position = glm::vec3(1.7610925, 0.48568499, -0.82623518), // .rotation = glm::vec3(0.5, 2, 1), .rotation = glm::vec3(-2.6415927, 1.1415926, -2.141639), .size = glm::vec3(4, 1.2, 2),