@@ -39,7 +39,7 @@ DemoBase::DemoBase()
39
39
Utilities::logger.addSink (unique_ptr<Utilities::ConsoleSink>(new Utilities::ConsoleSink (Utilities::LogLevel::INFO)));
40
40
41
41
m_sceneLoader = nullptr ;
42
- m_numberOfStepsPerRenderUpdate = 4 ;
42
+ m_numberOfStepsPerRenderUpdate = 8 ;
43
43
m_renderContacts = false ;
44
44
m_renderAABB = false ;
45
45
m_renderSDF = false ;
@@ -128,6 +128,7 @@ void DemoBase::cleanup()
128
128
m_scene.m_targetVelocityMotorSliderJointData .clear ();
129
129
m_scene.m_rigidBodySpringData .clear ();
130
130
m_scene.m_distanceJointData .clear ();
131
+ m_scene.m_damperJointData .clear ();
131
132
}
132
133
133
134
void DemoBase::init (int argc, char **argv, const char *demoName)
@@ -628,9 +629,17 @@ void DemoBase::renderBallOnLineJoint(BallOnLineJoint &bj)
628
629
629
630
void DemoBase::renderHingeJoint (HingeJoint &joint)
630
631
{
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 );
634
643
}
635
644
636
645
void DemoBase::renderUniversalJoint (UniversalJoint &uj)
@@ -645,34 +654,71 @@ void DemoBase::renderUniversalJoint(UniversalJoint &uj)
645
654
646
655
void DemoBase::renderSliderJoint (SliderJoint &joint)
647
656
{
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 );
650
667
}
651
668
652
669
void DemoBase::renderTargetPositionMotorSliderJoint (TargetPositionMotorSliderJoint &joint)
653
670
{
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 );
656
679
}
657
680
658
681
void DemoBase::renderTargetVelocityMotorSliderJoint (TargetVelocityMotorSliderJoint &joint)
659
682
{
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 );
662
693
}
663
694
664
695
void DemoBase::renderTargetAngleMotorHingeJoint (TargetAngleMotorHingeJoint &joint)
665
696
{
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 );
669
708
}
670
709
671
710
void DemoBase::renderTargetVelocityMotorHingeJoint (TargetVelocityMotorHingeJoint &joint)
672
711
{
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 );
676
722
}
677
723
678
724
void DemoBase::renderRigidBodyContact (RigidBodyContactConstraint &cc)
@@ -722,13 +768,16 @@ void DemoBase::mouseMove(int x, int y, void *clientData)
722
768
SimulationModel::RigidBodyVector &rb = model->getRigidBodies ();
723
769
for (size_t j = 0 ; j < base->m_selectedBodies .size (); j++)
724
770
{
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;
727
774
}
728
775
ParticleData &pd = model->getParticles ();
729
776
for (unsigned int j = 0 ; j < base->m_selectedParticles .size (); j++)
730
777
{
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;
732
781
}
733
782
base->m_oldMousePos = mousePos;
734
783
}
0 commit comments