@@ -39,7 +39,7 @@ DemoBase::DemoBase()
3939 Utilities::logger.addSink (unique_ptr<Utilities::ConsoleSink>(new Utilities::ConsoleSink (Utilities::LogLevel::INFO)));
4040
4141 m_sceneLoader = nullptr ;
42- m_numberOfStepsPerRenderUpdate = 4 ;
42+ m_numberOfStepsPerRenderUpdate = 8 ;
4343 m_renderContacts = false ;
4444 m_renderAABB = false ;
4545 m_renderSDF = false ;
@@ -128,6 +128,7 @@ void DemoBase::cleanup()
128128 m_scene.m_targetVelocityMotorSliderJointData .clear ();
129129 m_scene.m_rigidBodySpringData .clear ();
130130 m_scene.m_distanceJointData .clear ();
131+ m_scene.m_damperJointData .clear ();
131132}
132133
133134void DemoBase::init (int argc, char **argv, const char *demoName)
@@ -628,9 +629,17 @@ void DemoBase::renderBallOnLineJoint(BallOnLineJoint &bj)
628629
629630void DemoBase::renderHingeJoint (HingeJoint &joint)
630631{
631- MiniGL::drawSphere (joint.m_jointInfo .col (6 ) - 0.5 *joint.m_jointInfo .col (8 ), 0 .1f , m_jointColor);
632- MiniGL::drawSphere (joint.m_jointInfo .col (6 ) + 0.5 *joint.m_jointInfo .col (8 ), 0 .1f , m_jointColor);
633- MiniGL::drawCylinder (joint.m_jointInfo .col (6 ) - 0.5 *joint.m_jointInfo .col (8 ), joint.m_jointInfo .col (6 ) + 0.5 *joint.m_jointInfo .col (8 ), m_jointColor, 0 .05f );
632+ SimulationModel *model = Simulation::getCurrent ()->getModel ();
633+ const SimulationModel::RigidBodyVector &rigidBodies = model->getRigidBodies ();
634+ RigidBody *rb = rigidBodies[joint.m_bodies [0 ]];
635+
636+ const Vector3r &c = joint.m_jointInfo .block <3 , 1 >(0 , 4 );
637+ const Vector3r &axis_local = joint.m_jointInfo .block <3 , 1 >(0 , 6 );
638+ const Vector3r axis = rb->getRotation ().matrix () * axis_local;
639+
640+ MiniGL::drawSphere (c - 0.5 *axis, 0 .1f , m_jointColor);
641+ MiniGL::drawSphere (c + 0.5 *axis, 0 .1f , m_jointColor);
642+ MiniGL::drawCylinder (c - 0.5 *axis, c + 0.5 *axis, m_jointColor, 0 .05f );
634643}
635644
636645void DemoBase::renderUniversalJoint (UniversalJoint &uj)
@@ -645,34 +654,71 @@ void DemoBase::renderUniversalJoint(UniversalJoint &uj)
645654
646655void DemoBase::renderSliderJoint (SliderJoint &joint)
647656{
648- MiniGL::drawSphere (joint.m_jointInfo .col (6 ), 0 .1f , m_jointColor);
649- MiniGL::drawCylinder (joint.m_jointInfo .col (7 ) - joint.m_jointInfo .col (8 ), joint.m_jointInfo .col (7 ) + joint.m_jointInfo .col (8 ), m_jointColor, 0 .05f );
657+ SimulationModel *model = Simulation::getCurrent ()->getModel ();
658+ const SimulationModel::RigidBodyVector &rigidBodies = model->getRigidBodies ();
659+ RigidBody *rb = rigidBodies[joint.m_bodies [0 ]];
660+
661+ Quaternionr qR0;
662+ qR0.coeffs () = joint.m_jointInfo .col (1 );
663+ const Vector3r &c = rb->getPosition ();
664+ Vector3r axis = qR0.matrix ().col (0 );
665+ MiniGL::drawSphere (c, 0 .1f , m_jointColor);
666+ MiniGL::drawCylinder (c - axis, c + axis, m_jointColor, 0 .05f );
650667}
651668
652669void DemoBase::renderTargetPositionMotorSliderJoint (TargetPositionMotorSliderJoint &joint)
653670{
654- MiniGL::drawSphere (joint.m_jointInfo .col (6 ), 0 .1f , m_jointColor);
655- MiniGL::drawCylinder (joint.m_jointInfo .col (7 ) - joint.m_jointInfo .col (8 ), joint.m_jointInfo .col (7 ) + joint.m_jointInfo .col (8 ), m_jointColor, 0 .05f );
671+ SimulationModel *model = Simulation::getCurrent ()->getModel ();
672+ const SimulationModel::RigidBodyVector &rigidBodies = model->getRigidBodies ();
673+ RigidBody *rb = rigidBodies[joint.m_bodies [0 ]];
674+
675+ const Vector3r &c = rb->getPosition ();
676+ Vector3r axis = joint.m_jointInfo .block <3 , 1 >(0 , 1 );
677+ MiniGL::drawSphere (c, 0 .1f , m_jointColor);
678+ MiniGL::drawCylinder (c - axis, c + axis, m_jointColor, 0 .05f );
656679}
657680
658681void DemoBase::renderTargetVelocityMotorSliderJoint (TargetVelocityMotorSliderJoint &joint)
659682{
660- MiniGL::drawSphere (joint.m_jointInfo .col (6 ), 0 .1f , m_jointColor);
661- MiniGL::drawCylinder (joint.m_jointInfo .col (7 ) - joint.m_jointInfo .col (8 ), joint.m_jointInfo .col (7 ) + joint.m_jointInfo .col (8 ), m_jointColor, 0 .05f );
683+ SimulationModel *model = Simulation::getCurrent ()->getModel ();
684+ const SimulationModel::RigidBodyVector &rigidBodies = model->getRigidBodies ();
685+ RigidBody *rb = rigidBodies[joint.m_bodies [0 ]];
686+
687+ Quaternionr qR0;
688+ qR0.coeffs () = joint.m_jointInfo .col (1 );
689+ const Vector3r &c = rb->getPosition ();
690+ Vector3r axis = qR0.matrix ().col (0 );
691+ MiniGL::drawSphere (c, 0 .1f , m_jointColor);
692+ MiniGL::drawCylinder (c - axis, c + axis, m_jointColor, 0 .05f );
662693}
663694
664695void DemoBase::renderTargetAngleMotorHingeJoint (TargetAngleMotorHingeJoint &joint)
665696{
666- MiniGL::drawSphere (joint.m_jointInfo .col (6 ) - 0.5 *joint.m_jointInfo .col (8 ), 0 .1f , m_jointColor);
667- MiniGL::drawSphere (joint.m_jointInfo .col (6 ) + 0.5 *joint.m_jointInfo .col (8 ), 0 .1f , m_jointColor);
668- MiniGL::drawCylinder (joint.m_jointInfo .col (6 ) - 0.5 *joint.m_jointInfo .col (8 ), joint.m_jointInfo .col (6 ) + 0.5 *joint.m_jointInfo .col (8 ), m_jointColor, 0 .05f );
697+ SimulationModel *model = Simulation::getCurrent ()->getModel ();
698+ const SimulationModel::RigidBodyVector &rigidBodies = model->getRigidBodies ();
699+ RigidBody *rb = rigidBodies[joint.m_bodies [0 ]];
700+
701+ const Vector3r &c = joint.m_jointInfo .block <3 , 1 >(0 , 5 );
702+ const Vector3r &axis_local = joint.m_jointInfo .block <3 , 1 >(0 , 7 );
703+ const Vector3r axis = rb->getRotation ().matrix () * axis_local;
704+
705+ MiniGL::drawSphere (c - 0.5 *axis, 0 .1f , m_jointColor);
706+ MiniGL::drawSphere (c + 0.5 *axis, 0 .1f , m_jointColor);
707+ MiniGL::drawCylinder (c - 0.5 *axis, c + 0.5 *axis, m_jointColor, 0 .05f );
669708}
670709
671710void DemoBase::renderTargetVelocityMotorHingeJoint (TargetVelocityMotorHingeJoint &joint)
672711{
673- MiniGL::drawSphere (joint.m_jointInfo .col (6 ) - 0.5 *joint.m_jointInfo .col (8 ), 0 .1f , m_jointColor);
674- MiniGL::drawSphere (joint.m_jointInfo .col (6 ) + 0.5 *joint.m_jointInfo .col (8 ), 0 .1f , m_jointColor);
675- MiniGL::drawCylinder (joint.m_jointInfo .col (6 ) - 0.5 *joint.m_jointInfo .col (8 ), joint.m_jointInfo .col (6 ) + 0.5 *joint.m_jointInfo .col (8 ), m_jointColor, 0 .05f );
712+ SimulationModel *model = Simulation::getCurrent ()->getModel ();
713+ const SimulationModel::RigidBodyVector &rigidBodies = model->getRigidBodies ();
714+ RigidBody *rb = rigidBodies[joint.m_bodies [0 ]];
715+
716+ const Vector3r &c = joint.m_jointInfo .block <3 , 1 >(0 , 5 );
717+ const Vector3r axis = joint.m_jointInfo .block <3 , 1 >(0 , 7 );
718+
719+ MiniGL::drawSphere (c - 0.5 *axis, 0 .1f , m_jointColor);
720+ MiniGL::drawSphere (c + 0.5 *axis, 0 .1f , m_jointColor);
721+ MiniGL::drawCylinder (c - 0.5 *axis, c + 0.5 *axis, m_jointColor, 0 .05f );
676722}
677723
678724void DemoBase::renderRigidBodyContact (RigidBodyContactConstraint &cc)
@@ -722,13 +768,16 @@ void DemoBase::mouseMove(int x, int y, void *clientData)
722768 SimulationModel::RigidBodyVector &rb = model->getRigidBodies ();
723769 for (size_t j = 0 ; j < base->m_selectedBodies .size (); j++)
724770 {
725- if (rb[base->m_selectedBodies [j]]->getMass () != 0.0 )
726- rb[base->m_selectedBodies [j]]->getVelocity () += 1.0 / h * diff;
771+ const Real mass = rb[base->m_selectedBodies [j]]->getMass ();
772+ if (mass != 0.0 )
773+ rb[base->m_selectedBodies [j]]->getVelocity () += 3.0 / h * diff;
727774 }
728775 ParticleData &pd = model->getParticles ();
729776 for (unsigned int j = 0 ; j < base->m_selectedParticles .size (); j++)
730777 {
731- pd.getVelocity (base->m_selectedParticles [j]) += 5.0 *diff / h;
778+ const Real mass = pd.getMass (base->m_selectedParticles [j]);
779+ if (mass != 0.0 )
780+ pd.getVelocity (base->m_selectedParticles [j]) += 5.0 *diff / h;
732781 }
733782 base->m_oldMousePos = mousePos;
734783}
0 commit comments