void BitoneRangeFit::Compress4(void* block) { // cache some values int const count = m_bitones->GetCount(); Vec3 const* values = m_bitones->GetPoints(); Scr3 const* freq = m_bitones->GetWeights(); // create a codebook // resolve "metric * (value - code)" to "metric * value - metric * code" Vec3 codes[4]; Codebook4(codes, m_start, m_end); // match each point to the closest code u8 closest[16]; Scr3 error = Scr3(DISTANCE_BASE); for (int i = 0; i < count; ++i) { int idx = 0; // find the closest code Vec3 value = values[i]; Scr3 dist; MinDistance4<true>(dist, idx, value, codes); // accumulate the error AddDistance(dist, error, freq[i]); // save the index closest[i] = (u8)idx; } // save this scheme if it wins if (error < m_besterror) { // save the error m_besterror = error; // remap the indices u8 indices[16]; m_bitones->RemapIndices(closest, indices); // save the block WriteBitoneBlock4(m_start, m_end, indices, block); } }
void StandardJoints (DemoEntityManager* const scene) { scene->CreateSkyBox(); // customize the scene after loading // set a user friction variable in the body for variable friction demos // later this will be done using LUA script dMatrix offsetMatrix (dGetIdentityMatrix()); CreateLevelMesh (scene, "flatPlane.ngd", 1); dVector location (0.0f, 0.0f, 0.0f, 0.0f); dVector size (1.5f, 2.0f, 2.0f, 0.0f); // AddPoweredRagDoll (scene, dVector (-20.0f, 0.0f, -15.0f)); AddDistance (scene, dVector (-20.0f, 0.0f, -25.0f)); AddLimitedBallAndSocket (scene, dVector (-20.0f, 0.0f, -20.0f)); // AddPoweredRagDoll (scene, dVector (-20.0f, 0.0f, -15.0f)); AddBallAndSockectWithFriction (scene, dVector (-20.0f, 0.0f, -10.0f)); Add6DOF (scene, dVector (-20.0f, 0.0f, -5.0f)); AddHinge (scene, dVector (-20.0f, 0.0f, 0.0f)); AddSlider (scene, dVector (-20.0f, 0.0f, 5.0f)); AddCylindrical (scene, dVector (-20.0f, 0.0f, 10.0f)); AddUniversal (scene, dVector (-20.0f, 0.0f, 15.0f)); //just to show up add some relational joints example AddGear (scene, dVector (-20.0f, 0.0f, 20.0f)); AddPulley (scene, dVector (-20.0f, 0.0f, 25.0f)); AddGearAndRack (scene, dVector (-20.0f, 0.0f, 30.0f)); AddSlidingContact (scene, dVector (-20.0f, 0.0f, 35.0f)); // AddPathFollow (scene, dVector (20.0f, 0.0f, 0.0f)); // place camera into position dMatrix camMatrix (dGetIdentityMatrix()); dQuaternion rot (camMatrix); dVector origin (-40.0f, 5.0f, 0.0f, 0.0f); scene->SetCameraMatrix(rot, origin); }