环境的控制,主要是对环境及其特效的控制,主要包含环境(vpEnv)、太阳(EnvSun)、月亮(EnvMoon)、天幕(EnvSkyDome)、云层(EnvCloudLayer)、星星(EnvStars)、云柱体(EnvCloudVolume)、雪(EnvSnow)、雨(EnvRain)、风(EnvWind)、风层(EnvWindLayer)和风柱体(EnvWindVolume),如图6.24.1所示,这些特效都可以在LynX Prime 界面中完成,然后再导出相关代码即可。
图6.24.1 环境特效控制
本节只讨论环境、太阳、天幕、云层、风、雪和雨,其他特效读者可自行查询相关资料。
在导出的cpp 代码中,主要涉及环境及其相关特效的声明:
vpEnv* pEnv_myEnv=new vpEnv();
vpEnvSun* pEnvSun_myEnvSun=new vpEnvSun();
vpEnvSkyDome* pEnvSkyDome_myEnvSkyDome=new vpEnvSkyDome();
vpEnvCloudLayer* pEnvCloudLayer_myEnvCloudLayer=new vpEnvCloudLayer();
vpEnvWind* pEnvWind_myEnvWind=new vpEnvWind();
vpEnvSnow* pEnvSnow_myEnvSnow=new vpEnvSnow();
vpEnvRain* pEnvRain_myEnvRain=new vpEnvRain();
另外,包含把以下特效添加进环境的代码:
pEnv_myEnv->addEnvFx(pEnvSun_myEnvSun);
pEnv_myEnv->addEnvFx(pEnvMoon_myEnvMoon);
pEnv_myEnv->addEnvFx(pEnvSkyDome_myEnvSkyDome);
pEnv_myEnv->addEnvFx(pEnvCloudLayer_myEnvCloudLayer);
pEnv_myEnv->addEnvFx(pEnvWind_myEnvWind);
pEnv_myEnv->addEnvFx(pEnvRain_myEnvRain);
pEnv_myEnv->addEnvFx(pEnvSnow_myEnvSnow);
把这些特效的相关代码放进define()函数即可。
以下是下雪特效的相关代码:
其中,使能开关的代码为:
pEnvSnow_myEnvSnow->setEnable(false);
为了能够控制其使能,开始设置为关闭,也就是设置其使能值为false。
设置特效颗粒数的代码:
pEnvSnow_myEnvSnow->setNumParticles(50000);
默认值为50,其值太小,效果不明显。读者也可以根据需要调整数字。(www.daowen.com)
以下是下雨特效的相关代码:
其中,使能开关的代码为:
pEnvRain_myEnvRain->setEnable(false);;
为了能够控制其使能,开始设置为关闭,也就是设置其使能值为false。
设置特效颗粒数的代码:
pEnvRain_myEnvRain->setNumParticles(50000);
默认值为50,其值太小,效果不明显。读者也可以根据需要调整数字。
把相关环境特效加入到define 函数后,就可以通过代码来控制其状态和效果。设计了一个PublicMember的静态成员函数:
void setWeather(int WeatherType);
便于设置天气状况,其中的参数WeatherType 为整数类型:其值为1时,设置天气为晴天;其值为2时,设置天气为阴天;其值为3时,设置天气为雾天;其值为4时,设置天气为雨天;其值为5时,设置天气为雪天。
整个详细代码如图6.24.2所示。其中,声明函数:
static void setWeather(int WeatherType=1);
首先设置为静态成员,然后让WeatherType的默认值为1,即为晴天。
图6.24.2 环境控制实现代码
整个设计大体分为两类:晴天、阴天和雾天基本是依靠纹理进行设计;雨天和下雪天依靠粒子特效完成。
如图6.24.3所示,分别调用函数,实现功能:
PublicMember::setWeather(1);//晴天
PublicMember::setWeather(2);//阴天
PublicMember::setWeather(3);//雾天
PublicMember::setWeather(4);//雨天
PublicMember::setWeather(5);//雪天
读者可以对其中的参数进行修改设置,以达到用户的需求。
图6.24.3 环境特效控制
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。