用 Triton 模拟船舶的摇晃
Triton包括用多艘船或更普遍的物体在水中移动产生的波浪来使海洋表面三维位移的能力。
除了标准的 "开尔文尾流"(19.46度)在以恒定速度直线运动的船舶后面发现,以及在螺旋桨后面的湍流尾流的真实模型,Triton还能正确处理加速、减速或沿任意路径运动的船舶--所有这些都是在恒定的帧率下。
在你的模拟中加入尾流是很简单的。只要为你希望在场景中模拟的每一艘船或物体创建一个Triton::WakeGenerator对象,并与你要附加的Triton::Ocean相关联。
Triton::WakeGeneratorParameters parameters;
Triton::WakeGenerator *ship = new Triton::WakeGenerator(ocean, parameters);
为了利用更高级的尾流模拟功能,你可以向WakeGenerator构造函数传递附加信息。例如,让我们为一艘长度为100米的船设置一个尾流,在船头(尾流源前方100米处)有基于粒子的喷射效应,波束宽度为20米。有了这些信息,考虑到船舶的长度和波束宽度,船舶后面的湍流尾流将以现实的速度扩展,这对训练来说可能是有用的。
Triton::WakeGeneratorParameters parameters;
parameters.sprayEffects = true;
parameters.bowSprayOffset = 100.0;
parameters.beamWidth = 20.0;
parameters.length = 100.0;
Triton::WakeGenerator *ship = new Triton::WakeGenerator(ocean, parameters);
然后,每一帧,使用Triton::WakeGenerator::Update()更新船舶螺旋桨的位置、方向和速度。位置是世界单位,速度是世界单位/秒,时间戳是秒。方向是世界空间中的归一化矢量。
Triton包括一个预览工具,如果你已经安装了我们的Windows SDK,你可能会发现在探索不同唤醒设置的效果方面很有用。你会发现在开始菜单的Triton SDK下安装了一个 "Triton预览工具 "应用程序。它加载了一个样本船舶模型,并允许你在运行时交互式地调整其唤醒参数,以及海洋状态和其他Triton设置。
ship->Update(Triton::Vector3(shipX, shipY, shipZ), shipDirection, shipVelocity, now);
在C#中,它以同样的方式工作--只需观察与C++语法的不同。(不要使用*,因为你没有指针,使用.而不是::,等等)。
这就是它的全部内容了!一旦你停止在WakeGenerator上调用Update,任何现有的唤醒将随着时间的推移而消失。当你用完WakeGenerator对象时,只需删除它,并确保它所连接的Tirton::Ocean被初始化,并且在WakeGenerator的有效期内不被删除。确保速度是现实的和准确的,这样才能收到现实的和准确的海浪。
你可以在一个场景中模拟你想要的任意数量的WakeGenerator。由于波浪是在Triton的顶点程序中应用的,因此在任何特定的帧中可以绘制有限数量的单个波浪。如果有更多的波浪被模拟到可以同时绘制,Triton将选择最接近摄像机的波浪。你可以使用resources/Triton.config中的max-wake-waves设置来调整这个上限。
请注意,湍流尾流模拟可能会对某些系统造成负担,因为它几乎完全在GPU上执行。如果你在场景中出现波浪时遇到性能不佳的情况,可以尝试在resources/Triton.config文件中把 "wake-propeller-backwash "值设置为 "no",这样船只后面的螺旋桨反冲就会被禁用。同样,也可以使用 "wake-kelvin-wakes "设置禁用三维开尔文尾流。禁用一个或其他的波浪效果,将大大改善波浪可见时的性能,调整你所使用的渲染器的最大波浪参数也是如此。
还要注意的是,在ATI/AMD显卡上使用OpenGL时,3D开尔文唤醒被禁用。这似乎是由于驱动程序的限制造成的。如果你想在你的AMD显卡上尝试使用3D开尔文唤醒,请将resources/Triton.config文件中的 "disable-kelvin-wakes-AMD "设置为 "no"。
渝公网安备50010702505508