2.6.10 水效
水效
水效是指在场景中模拟真实水面效果。水效是通过模版实现的,因此在创建水效图层时,需要传入需要显示水效区域的模型文件路径。
水效主要包括添加(创建)、更新和删除3种操作。
下图是水效效果:
参数说明
水效可配置的参数如下表所示:
配置项 | 配置说明 | 值类型 | 备注 |
---|---|---|---|
LayerOptionsName | 配置对象名称 | string | 水效图层配置为:WaterEffectLayerOptions |
StencilUrl | 模版路径 | string | 作为水效模版的数据绝对路径。数据后缀为.wrl |
WindDirectionX | 风力X | double | 水面上方X方向风力大小 |
WindDirectionY | 风力Y | double | 水面上方Y方向风力大小 |
WindSpeed | 风速 | double | 水面上方风速大小 |
Depth | 深度 | double | 水域渲染深度 |
ReflectionDamp | 反射阻尼 | double | 水面泡沫影响因子 |
ChoppyFactor | 波浪影响因子 | double | 水面波浪影响因子 |
FoamBottomHeight | 泡沫底部高度 | double | 泡沫底部高度 |
FoamTopHeight | 泡沫顶部高度 | double | 泡沫顶部高度 |
LightColor | 灯光颜色 | R,G,B,A | 灯光照射水面颜色。颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0" |
WaveBottomColor | 浪底颜色 | R,G,B,A | 波浪底面颜色。颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0" |
WaveTopColor | 浪顶颜色 | R,G,B,A | 波浪顶面颜色。颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0" |
FogColor | 水雾颜色 | R,G,B,A | 水雾颜色。颜色取值范围在0-1.0之间,如 "0.9,0.8,0.8,1.0" |
FogDensity | 水雾强度 | double | 水雾强度。取值范围在0-1之间 |
IsChoppy | 波浪开启状态 | bool | 波浪开启状态。默认false-不开启 |
IsCrestFoam | 泡沫开启状态 | bool | 泡沫开启状态。默认false-不开启 |
IsReflection | 倒影开启状态 | bool | 水面倒影开启状态。默认false-不开启 |
IsWaterFog | 水雾开启状态 | bool | 水雾开启状态。默认false-不开启 |
代码调用示例
Javascript调用
var waterEffectLayer;
function CreateWaterEffectLayer() {
var tlo = map.CreateLayerOptions("WaterEffectLayer");//创建水效图层配置,任意名称
tlo.AddConfig("LayerOptionsName", "WaterEffectLayerOptions");//创建配置类型, WaterEffectLayerOptions代表水效数据配置
tlo.AddConfig("StencilUrl", gModelDeviceFolderPath+"\\water.wrl");//模板路径
tlo.AddConfig("WindDirectionX", "1.1");//风向X
tlo.AddConfig("WindDirectionY", "1.1");//风向Y
tlo.AddConfig("WindSpeed", "1");//风速
tlo.AddConfig("Depth", "30");//深度
tlo.AddConfig("ReflectionDamp", "0.35");//反射阻尼
tlo.AddConfig("ChoppyFactor", "2.5");//波浪影响因子
tlo.AddConfig("FoamBottomHeight", "2.2");//泡沫底部高度
tlo.AddConfig("FoamTopHeight", "3.0");//泡沫顶部高度
tlo.AddConfig("LightColor", "0.41,0.54,0.68,1.0");//灯光颜色
tlo.AddConfig("WaveBottomColor", "0.1,0.2,0.4,1.0");//浪底颜色
tlo.AddConfig("WaveTopColor", "0.2,0.3,0.4,1.0");//浪顶颜色
tlo.AddConfig("FogColor", "0.7,0.8,1.0,1.0");//水面雾颜色
tlo.AddConfig("FogDensity", "0.2");//水面雾强度
tlo.AddConfig("IsChoppy", "true");//波浪开启状态
tlo.AddConfig("IsCrestFoam", "true");//泡沫效应开启状态
tlo.AddConfig("IsReflection", "true");//倒影开启状态
tlo.AddConfig("IsWaterFog", "false");//水雾开启状态
tlo.AddConfig("IsEndlessOcean", "false");//无尽海洋模式开启状态
waterEffectLayer = map.CreateLayer("WaterEffectLayer", tlo);//创建图层
map.AddLayer(waterEffectLayer);//添加图层
waterEffectLayer.Locate();//图层定位
}
//更新图层
function UpdateWaterEffectLayer() {
var tlo = map.CreateLayerOptions("WaterEffectLayer");//创建水效图层配置,任意名称
tlo.AddConfig("LayerOptionsName", "WaterEffectLayerOptions");//创建配置类型,WaterEffectLayerOptions代表水效数据配置
tlo.AddConfig("WindDirectionX", "1.1");//风向X
tlo.AddConfig("WindDirectionY", "1.1");//风向Y
tlo.AddConfig("WindSpeed", "2");//风速
tlo.AddConfig("Depth", "1000");//深度
tlo.AddConfig("ReflectionDamp", "0.35");//反射阻尼
tlo.AddConfig("ChoppyFactor", "10.5");//波浪影响因子
tlo.AddConfig("FoamBottomHeight", "2.2");//泡沫底部高度
tlo.AddConfig("FoamTopHeight", "30.0");//泡沫顶部高度
tlo.AddConfig("LightColor", "0.41,0.54,0.68,1.0");//灯光颜色
tlo.AddConfig("WaveBottomColor", "0.1,0.2,0.4,1.0");//浪底颜色
tlo.AddConfig("WaveTopColor", "0.2,0.3,0.3,1.0");//浪顶颜色
tlo.AddConfig("FogColor", "0.7,0.8,1.0,1.0");//水面雾颜色
tlo.AddConfig("FogDensity", "0.0002");//水面雾强度
tlo.AddConfig("IsChoppy", "true");//波浪开启状态
tlo.AddConfig("IsCrestFoam", "true");//泡沫效应开启状态
tlo.AddConfig("IsReflection", "true");//倒影开启状态
tlo.AddConfig("IsWaterFog", "false");//水雾开启状态
tlo.AddConfig("IsEndlessOcean", "false");//无尽海洋模式开启状态
waterEffectLayer.UpdateLayerOptions(tlo);//更新图层
}
//序列化图层
function SerialWaterEffectLayer() {
if (waterEffectLayer != null) {
waterEffectLayer.SerializeLayer("E:\\WaterEffect.xml");//图层序列化
}
}
//反序列化图层
function DeserialWaterEffectLayer(){
waterEffectLayer = map.DeserializeLayer("E:\\WaterEffect.xml");//图层反序列化
}
//移除图层
function RemoveWaterEffectLayer() {
if (waterEffectLayer != null) {
map.RemoveLayer(waterEffectLayer);//移除图层
waterEffectLayer = null;
}
}
C++调用
BaseObjectCOMLib::ILayerObjectPtr waterEffectLayer;//图层对象
void CWaterEffectLayerOptionsDlg::OnBnClickedCreatewatereffectlayer()
{
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = map->CreateLayerOptions("WaterEffectLayer");//创建水效图层配置
tlo->AddConfig("LayerOptionsName", "WaterEffectLayerOptions");//创建配置类型, WaterEffectLayerOptions代表水效数据配置
tlo->AddConfig("StencilUrl", (gModelDeviceFolderPath+"\\water.wrl").c_str());//模板路径
tlo->AddConfig("WindDirectionX", "1.1");//风向X
tlo->AddConfig("WindDirectionY", "1.1");//风向Y
tlo->AddConfig("WindSpeed", "1");//风速
tlo->AddConfig("Depth", "30");//深度
tlo->AddConfig("ReflectionDamp", "0.35");//反射阻尼
tlo->AddConfig("ChoppyFactor", "2.5");//波浪影响因子
tlo->AddConfig("FoamBottomHeight", "2.2");//泡沫底部高度
tlo->AddConfig("FoamTopHeight", "3.0");//泡沫顶部高度
tlo->AddConfig("LightColor", "0.41,0.54,0.68,1.0");//灯光颜色
tlo->AddConfig("WaveBottomColor", "0.1,0.2,0.4,1.0");//浪底颜色
tlo->AddConfig("WaveTopColor", "0.2,0.3,0.4,1.0");//浪顶颜色
tlo->AddConfig("FogColor", "0.7,0.8,1.0,1.0");//水面雾颜色
tlo->AddConfig("FogDensity", "0.2");//水面雾强度
tlo->AddConfig("IsChoppy", "true");//波浪开启状态
tlo->AddConfig("IsCrestFoam", "true");//泡沫效应开启状态
tlo->AddConfig("IsReflection", "true");//倒影开启状态
tlo->AddConfig("IsWaterFog", "false");//水雾开启状态
tlo->AddConfig("IsEndlessOcean", "false");//无尽海洋模式开启状态
waterEffectLayer = map->CreateLayer("WaterEffectLayer", tlo);
map->AddLayer(waterEffectLayer);
waterEffectLayer->Locate();
}
void CWaterEffectLayerOptionsDlg::OnBnClickedUpdatewatereffectlayer()
{
ConfigOptionsCOMLib::ILayerOptionsPtr tlo = map->CreateLayerOptions("WaterEffectLayer");//创建水效图层配置
tlo->AddConfig("LayerOptionsName", "WaterEffectLayerOptions");//创建配置类型,WaterEffectLayerOptions代表水效数据配置
tlo->AddConfig("WindDirectionX", "1.1");//风向X
tlo->AddConfig("WindDirectionY", "1.1");//风向Y
tlo->AddConfig("WindSpeed", "2");//风速
tlo->AddConfig("Depth", "1000");//深度
tlo->AddConfig("ReflectionDamp", "0.35");//反射阻尼
tlo->AddConfig("ChoppyFactor", "10.5");//波浪影响因子
tlo->AddConfig("FoamBottomHeight", "2.2");//泡沫底部高度
tlo->AddConfig("FoamTopHeight", "30.0");//泡沫顶部高度
tlo->AddConfig("LightColor", "0.41,0.54,0.68,1.0");//灯光颜色
tlo->AddConfig("WaveBottomColor", "0.1,0.2,0.4,1.0");//浪底颜色
tlo->AddConfig("WaveTopColor", "0.2,0.3,0.3,1.0");//浪顶颜色
tlo->AddConfig("FogColor", "0.7,0.8,1.0,1.0");//水面雾颜色
tlo->AddConfig("FogDensity", "0.0002");//水面雾强度
tlo->AddConfig("IsChoppy", "true");//波浪开启状态
tlo->AddConfig("IsCrestFoam", "true");//泡沫效应开启状态
tlo->AddConfig("IsReflection", "true");//倒影开启状态
tlo->AddConfig("IsWaterFog", "false");//水雾开启状态
tlo->AddConfig("IsEndlessOcean", "false");//无尽海洋模式开启状态
waterEffectLayer->UpdateLayerOptions(tlo);
}
void CWaterEffectLayerOptionsDlg::OnBnClickedRemovewatereffectlayer()
{
if (waterEffectLayer != NULL) {
map->RemoveLayer(waterEffectLayer);//移除水效图层
waterEffectLayer = NULL;
}
}
C#调用
ILayerObject waterEffectLayer;
private void CreateWaterEffectLayer_Click(object sender, EventArgs e)
{
var tlo = map.CreateLayerOptions("WaterEffectLayer");//创建水效图层配置,任意名称
tlo.AddConfig("LayerOptionsName", "WaterEffectLayerOptions");//创建配置类型, WaterEffectLayerOptions代表水效数据配置
tlo.AddConfig("StencilUrl", "E:\\water.wrl");//模板路径
tlo.AddConfig("WindDirectionX", "1.1");//风向X
tlo.AddConfig("WindDirectionY", "1.1");//风向Y
tlo.AddConfig("WindSpeed", "1");//风速
tlo.AddConfig("Depth", "30");//深度
tlo.AddConfig("ReflectionDamp", "0.35");//反射阻尼
tlo.AddConfig("ChoppyFactor", "2.5");//波浪影响因子
tlo.AddConfig("FoamBottomHeight", "2.2");//泡沫底部高度
tlo.AddConfig("FoamTopHeight", "3.0");//泡沫顶部高度
tlo.AddConfig("LightColor", "0.41,0.54,0.68,1.0");//灯光颜色
tlo.AddConfig("WaveBottomColor", "0.1,0.2,0.4,1.0");//浪底颜色
tlo.AddConfig("WaveTopColor", "0.2,0.3,0.4,1.0");//浪顶颜色
tlo.AddConfig("FogColor", "0.7,0.8,1.0,1.0");//水面雾颜色
tlo.AddConfig("FogDensity", "0.2");//水面雾强度
tlo.AddConfig("IsChoppy", "true");//波浪开启状态
tlo.AddConfig("IsCrestFoam", "true");//泡沫效应开启状态
tlo.AddConfig("IsReflection", "true");//倒影开启状态
tlo.AddConfig("IsWaterFog", "false");//水雾开启状态
tlo.AddConfig("IsEndlessOcean", "false");//无尽海洋模式开启状态
waterEffectLayer = map.CreateLayer("WaterEffectLayer", tlo);
map.AddLayer(waterEffectLayer);
waterEffectLayer.Locate();
}
//更新水效图层
private void UpdateWaterEffectLayerUpdateWaterEffectLayer_Click(object sender, EventArgs e)
{
var tlo = map.CreateLayerOptions("WaterEffectLayer");//创建水效图层配置,任意名称
tlo.AddConfig("LayerOptionsName", "WaterEffectLayerOptions");//创建配置类型,WaterEffectLayerOptions代表水效数据配置
tlo.AddConfig("WindDirectionX", "1.1");//风向X
tlo.AddConfig("WindDirectionY", "1.1");//风向Y
tlo.AddConfig("WindSpeed", "2");//风速
tlo.AddConfig("Depth", "1000");//深度
tlo.AddConfig("ReflectionDamp", "0.35");//反射阻尼
tlo.AddConfig("ChoppyFactor", "10.5");//波浪影响因子
tlo.AddConfig("FoamBottomHeight", "2.2");//泡沫底部高度
tlo.AddConfig("FoamTopHeight", "30.0");//泡沫顶部高度
tlo.AddConfig("LightColor", "0.41,0.54,0.68,1.0");//灯光颜色
tlo.AddConfig("WaveBottomColor", "0.1,0.2,0.4,1.0");//浪底颜色
tlo.AddConfig("WaveTopColor", "0.2,0.3,0.3,1.0");//浪顶颜色
tlo.AddConfig("FogColor", "0.7,0.8,1.0,1.0");//水面雾颜色
tlo.AddConfig("FogDensity", "0.0002");//水面雾强度
tlo.AddConfig("IsChoppy", "true");//波浪开启状态
tlo.AddConfig("IsCrestFoam", "true");//泡沫效应开启状态
tlo.AddConfig("IsReflection", "true");//倒影开启状态
tlo.AddConfig("IsWaterFog", "false");//水雾开启状态
tlo.AddConfig("IsEndlessOcean", "false");//无尽海洋模式开启状态
waterEffectLayer.UpdateLayerOptions(tlo);
}
//序列化水效图层
private void SerialWaterEffectLayer_Click(object sender, EventArgs e)
{
if (waterEffectLayer != null)
{
waterEffectLayer.SerializeLayer("E:\\WaterEffect.xml");
}
}
//反序列化图层
private void DeserialWaterEffectLayer_Click(object sender, EventArgs e)
{
waterEffectLayer = map.DeserializeLayer("E:\\WaterEffect.xml");
}
//移除水效图层
private void RemoveWaterEffectLayer_Click(object sender, EventArgs e)
{
if (waterEffectLayer != null)
{
map.RemoveLayer(waterEffectLayer);//移除水效图层
waterEffectLayer = null;
}
}