水面涟漪仿真

1、案例介绍

案例位置examples/Cuda/HeigthField/GL_CapillaryWave

功能介绍:案例中展示了 CapillaryWave 类的的基本使用。表面张力波 (Capillary wave) 是延著液体行进的波,其动力学及相速度是由表面张力的效应所决定。在水面上的表面张力波常称为涟漪,例如在现实世界中微风吹过水面产生涟漪的现象。表面张力波是自然界常见的现象,其波长多半在数公分以内,而相速度约0.2-0.3米/秒。PeriDyno 引擎支持涟漪效果实时仿真,可由用户调节海浪区域大小。

案例说明:该案例主要用于模拟测试水面涟漪的仿真功能。初始状态,给水面中间部分水域设置一个高度,模拟中间水域下落后产生的涟漪效果。

2、程序实现

  • 创建场景图:
	std::shared_ptr<SceneGraph> scn = std::make_shared<SceneGraph>();
  • 创建CapillaryWave节点,用于模拟水上的波纹。
	auto root = scn->addNode(std::make_shared<CapillaryWave<DataType3f>>());
  • 创建渲染节点:
	auto mapper = std::make_shared<HeightFieldToTriangleSet<DataType3f>>();
	root->stateTopology()->connect(mapper->inHeightField());
	root->graphicsPipeline()->pushModule(mapper);

	auto sRender = std::make_shared<GLSurfaceVisualModule>();
	sRender->setColor(Vec3f(0, 0.2, 1.0));
	mapper->outTriangleSet()->connect(sRender->inTriangleSet());
	root->graphicsPipeline()->pushModule(sRender);