fix(physics): made the physics slightly less jittery, but only slightly

This commit is contained in:
maelstrom 2025-04-18 21:36:18 +02:00
parent 9e43c63c4e
commit 1617086692
2 changed files with 14 additions and 7 deletions

View file

@ -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> 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);
}

View file

@ -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),