|
|
|
|
|
|
| class SphereCloth : public Scene |
| { |
| public: |
|
|
| SphereCloth(const char* name) : |
| Scene(name) {} |
|
|
| virtual void Initialize() |
| { |
| float stretchStiffness = 1.0f; |
| float bendStiffness = 0.5f; |
| float shearStiffness = 0.5f; |
|
|
| float radius = 0.05f; |
|
|
| int dimx = 70; |
| int dimz = 70; |
| int phase = NvFlexMakePhase(0, eNvFlexPhaseSelfCollide | eNvFlexPhaseSelfCollideFilter); |
|
|
| float spacing = radius*0.8f; |
|
|
| CreateSpringGrid(Vec3(-dimx*spacing*0.5f, 1.5f, -dimz*spacing*0.5f), dimx, dimz, 1, spacing, phase, stretchStiffness, bendStiffness, shearStiffness, 0.0f, 1.0f); |
|
|
| g_params.radius = radius*1.0f; |
| g_params.dynamicFriction = 0.45f; |
| g_params.particleFriction = 0.45f; |
| g_params.dissipation = 0.0f; |
| g_params.numIterations = 8; |
| g_params.viscosity = 0.0f; |
| g_params.drag = 0.05f; |
| g_params.collisionDistance = radius*0.5f; |
| g_params.relaxationMode = eNvFlexRelaxationGlobal; |
| g_params.relaxationFactor = 0.25f; |
| g_params.numPlanes = 1; |
|
|
| g_numSubsteps = 2; |
|
|
| g_windStrength = 0.0f; |
|
|
| |
| g_drawPoints = false; |
| g_drawSprings = false; |
|
|
| g_lightDistance *= 1.5f; |
|
|
| mTime = 0.0f; |
| } |
|
|
| void Update() |
| { |
| ClearShapes(); |
|
|
| mTime += g_dt; |
|
|
| |
| float startTime = 1.0f; |
|
|
| float time = Max(0.0f, mTime-startTime); |
| float lastTime = Max(0.0f, time-g_dt); |
|
|
| const float rotationSpeed = 1.0f; |
| const float translationSpeed = 0.0f; |
|
|
| Vec3 pos = Vec3(translationSpeed*(1.0f-cosf(time)), 0.5f, 0.0f); |
| Vec3 prevPos = Vec3(translationSpeed*(1.0f-cosf(lastTime)), 0.5f, 0.0f); |
|
|
| Quat rot = QuatFromAxisAngle(Vec3(0.0f, 1.0f, 0.0f), kPi*(1.0f-cosf(rotationSpeed*time))); |
| Quat prevRot = QuatFromAxisAngle(Vec3(0.0f, 1.0f, 0.0f), kPi*(1.0f-cosf(rotationSpeed*lastTime))); |
|
|
| AddSphere(0.5f, pos, rot); |
| |
| |
| g_buffers->shapePrevPositions[0] = Vec4(prevPos, 0.0f); |
| g_buffers->shapePrevRotations[0] = prevRot; |
|
|
| UpdateShapes(); |
| } |
|
|
| float mTime; |
| int mType; |
| }; |
|
|
|
|