5 private static string dataPath =
"../data/";
7 private const double youngModulus = 1000.0;
8 private const double poissonRatio = 0.3;
9 private const double timeStep = 0.01;
10 private const int maxIter = 5;
12 public static void Main(
string[] args)
18 Scene scene =
new Scene(
"PbdCollisionOneDragon");
21 scene.getActiveCamera().setPosition(0.248534, 9.71495, 17.3109);
22 scene.getActiveCamera().setFocalPoint(0.927986, 2.73914, 2.15692);
23 scene.getActiveCamera().setViewUp(0.0092602, 0.911091, -0.412101);
26 PbdObject deformableObj =
new PbdObject(
"DeformableObj");
29 string tetMeshFileName = dataPath +
"asianDragon/asianDragon.veg";
30 TetrahedralMesh coarseTetMesh = MeshIO.readTetrahedralMesh(tetMeshFileName);
32 string surfMeshFileName = dataPath +
"asianDragon/asianDragon.obj";
33 SurfaceMesh highResSurfMesh = MeshIO.readSurfaceMesh(surfMeshFileName);
34 highResSurfMesh.translate(
new Vec3d(0.0, 10.0, 0.0), Geometry.TransformType.ApplyToData);
35 coarseTetMesh.translate(
new Vec3d(0.0, 10.0, 0.0), Geometry.TransformType.ApplyToData);
38 RenderMaterial material =
new RenderMaterial();
39 material.setDisplayMode(RenderMaterial.DisplayMode.Surface);
40 material.setLineWidth(0.5);
41 material.setEdgeColor(Color.Blue);
42 material.setShadingModel(RenderMaterial.ShadingModel.Phong);
43 VisualModel surfMeshModel =
new VisualModel();
44 surfMeshModel.setGeometry(highResSurfMesh);
45 surfMeshModel.setRenderMaterial(material);
48 PbdModel pbdModel =
new PbdModel();
49 pbdModel.setModelGeometry(coarseTetMesh);
52 PbdModelConfig pbdParams =
new PbdModelConfig();
53 pbdParams.m_femParams.m_YoungModulus = youngModulus;
54 pbdParams.m_femParams.m_PoissonRatio = poissonRatio;
55 pbdParams.enableFemConstraint(PbdFemConstraint.MaterialType.Corotation);
56 pbdParams.m_gravity =
new Vec3d(0, -10.0, 0);
57 pbdParams.m_dt = timeStep;
58 pbdParams.m_iterations = maxIter;
59 pbdModel.configure(pbdParams);
61 deformableObj.addVisualModel(surfMeshModel);
62 deformableObj.setCollidingGeometry(coarseTetMesh);
63 deformableObj.setPhysicsGeometry(coarseTetMesh);
64 deformableObj.setPhysicsToVisualMap(
new PointToTetMap(coarseTetMesh, highResSurfMesh));
65 deformableObj.setDynamicalModel(pbdModel);
66 deformableObj.getPbdBody().uniformMassValue = 1.0;
68 scene.addSceneObject(deformableObj);
71 CollidingObject floorObj =
new CollidingObject(
"Floor");
73 Plane floorGeom =
new Plane(
new Vec3d(0.0, 0.0, 0.0),
new Vec3d(0.0, 1.0, 0.0));
74 floorGeom.setWidth(100.0);
76 floorObj.setCollidingGeometry(floorGeom);
77 floorObj.setVisualGeometry(floorGeom);
79 scene.addSceneObject(floorObj);
82 scene.addInteraction(
new PbdObjectCollision(deformableObj, floorObj,
"PointSetToPlaneCD"));
85 DirectionalLight light =
new DirectionalLight();
86 light.setFocalPoint(
new Vec3d(5.0, -8.0, -5.0));
87 light.setIntensity(1.0);
88 scene.addLight(
"light", light);
94 VTKViewer viewer =
new VTKViewer(
"Viewer");
95 viewer.setActiveScene(scene);
98 SceneManager sceneManager =
new SceneManager(
"Scene Manager");
99 sceneManager.setActiveScene(scene);
100 sceneManager.pause();
102 SimulationManager driver =
new SimulationManager();
103 driver.addModule(viewer);
104 driver.addModule(sceneManager);
108 MouseSceneControl mouseControl =
new MouseSceneControl();
109 mouseControl.setDevice(viewer.getMouseDevice());
110 mouseControl.setSceneManager(sceneManager);
111 scene.addControl(mouseControl);
113 KeyboardSceneControl keyControl =
new KeyboardSceneControl();
114 keyControl.setDevice(viewer.getKeyboardDevice());
115 keyControl.setSceneManager(
new SceneManagerWeakPtr(sceneManager));
116 keyControl.setModuleDriver(
new ModuleDriverWeakPtr(driver));
117 scene.addControl(keyControl);
lazy initialized singleton