塑性材料

1、塑性材料

塑性材料在发生小应变时,材料性质基本为线弹性,弹性模量为常数;当应力超过屈服应力后,刚度会显著下降。

2、程序实现

  • 创建场景图:
	std::shared_ptr<SceneGraph> scn = std::make_shared<SceneGraph>();
  • 创建边界以及两个塑性节点:
 	//Create a particle emitter
	auto boundary = scn->addNode(std::make_shared<StaticBoundary<DataType3f>>());
	boundary->loadCube(Vec3f(0), Vec3f(1), 0.005, true);

	auto elastoplasticBody = scn->addNode(std::make_shared<ElastoplasticBody<DataType3f>>());
	elastoplasticBody->connect(boundary->importParticleSystems());

	elastoplasticBody->setVisible(false);
  	elastoplasticBody->loadParticles(Vec3f(-1.1), Vec3f(1.15), 0.1);
  	elastoplasticBody->loadSurface("../../data/standard/standard_cube20.obj");
	elastoplasticBody->scale(0.05);
	elastoplasticBody->translate(Vec3f(0.3, 0.2, 0.5));
	elastoplasticBody->getSurfaceNode()->setVisible(true);

	
	auto elasticBody = scn->addNode(std::make_shared<ElasticBody<DataType3f>>());
	boundary->addParticleSystem(elasticBody);

	elasticBody->setVisible(false);
	elasticBody->loadParticles(Vec3f(-1.1), Vec3f(1.15), 0.1);
	elasticBody->loadSurface("../../data/standard/standard_cube20.obj");
	elasticBody->scale(0.05);
	elasticBody->translate(Vec3f(0.5, 0.2, 0.5));
  • 对两个塑性节点分别创建渲染节点:
	auto ptRender = std::make_shared<GLSurfaceVisualModule>();
	ptRender->setColor(Vec3f(0, 1, 1));
	elastoplasticBody->getSurfaceNode()->currentTopology()->connect(ptRender->inTriangleSet());
	elastoplasticBody->getSurfaceNode()->graphicsPipeline()->pushModule(ptRender);

	auto sRender = std::make_shared<GLSurfaceVisualModule>();
	sRender->setColor(Vec3f(1, 1, 1));
	elasticBody->getSurfaceNode()->currentTopology()->connect(sRender->inTriangleSet());
	elasticBody->getSurfaceNode()->graphicsPipeline()->pushModule(sRender);

3、仿真效果

如下图所示,当塑性材料从空中坠落到地面之后,发生塑性形变。代码参考example/GL_Plasticity/main.h: