案例位置:examples/Cuda/HeigthField/GL_Ocean
功能介绍:该案例展示了 Ocean 类、CapillaryWave 类和 OceanPatch 类的基本使用。PeriDyno引擎支持模拟海浪以及水面涟漪的模拟。用户可以设置不同等级的海浪大小,支持0-12级海浪。案例将海浪与水面涟漪的效果进行了耦合。
案例说明:该案例主要用于模拟测试海洋仿真功能。OceanPatch类用于模拟不同等级的海浪;CapillaryWave类用于模拟水面涟漪;Ocean类将两者的仿真结果耦合在一起。如下图所示,海洋中不仅有海浪的运动,同时水面中间有涟漪效果。
std::shared_ptr<SceneGraph> scn = std::make_shared<SceneGraph>();
std::shared_ptr<SceneGraph> scn = std::make_shared<SceneGraph>();
auto oceanPatch = scn->addNode(std::make_shared<OceanPatch<DataType3f>>());
auto root = scn->addNode(std::make_shared<Ocean<DataType3f>>());
root->varExtentX()->setValue(2);
root->varExtentZ()->setValue(2);
oceanPatch->connect(root->importOceanPatch());
auto capillaryWave = scn->addNode(std::make_shared<CapillaryWave<DataType3f>>(512, 512.0f));
capillaryWave->connect(root->importCapillaryWaves());
auto mapper = std::make_shared<HeightFieldToTriangleSet<DataType3f>>();
root->stateHeightField()->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);