案例位置:examples/Cuda/HeigthField/GL_OceanPatch
功能介绍:该案例展示了 OceanPatch 类的基本使用。通过对海洋的波形及运动的模拟来实现对不同海洋等级的仿真。利用一系列单元波的振幅、频率、传播方向等参数,经线性叠加合成海浪。根据快速傅里叶变换(FFT)的海浪模拟的思想,利用Phillips波普得到海面的高度场(也就是傅里叶变换的频域),然后将其逆傅里叶变换(IFFT)得到海面(也就是时域),从何实现对海浪的模拟。
案例说明:该案例主要用于模拟测试不同等级的海浪功能。海平面在风的作用力下形成海浪,不同等级的风可以产生不同的海浪。用户通过设定风速等级,从何达到模拟不同等级海浪的效果。
std::shared_ptr<SceneGraph> scn = std::make_shared<SceneGraph>();
auto root = scn->addNode(std::make_shared<OceanPatch<DataType3f>>());
root->varWindType()->setValue(8);
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));
sRender->varUseVertexNormal()->setValue(true);
mapper->outTriangleSet()->connect(sRender->inTriangleSet());
root->graphicsPipeline()->pushModule(sRender);