// 天气类型 :1,晴天;2,阴天 ;3,雾天 ;4,雨天 ;5,雪天
void PublicMember::setWeather(int WeatherType)
{
char str[256], *cp = getenv("MPI_LOCATE_VEGA_PRIME");
vpEnv* m_env= * vpEnv::begin();
vpEnvSun* m_sun=* vpEnvSun::begin();
vpEnvSkyDome* m_skyDome=* vpEnvSkyDome::begin();
vpEnvCloudLayer* m_cloudLayer=* vpEnvCloudLayer::begin();
vpEnvWind* m_wind=* vpEnvWind::begin();
vpEnvSnow* m_snow=* vpEnvSnow::begin();
vpEnvRain* m_rain=* vpEnvRain::begin();
switch (WeatherType)
{
case 1: // 默认值,晴天
m_env->setVisibilityColor(1.0f, 1.0f, 1.0f, 1.0f);
m_env->setVisibilityRangeOpaque(60000.0f);
m_sun->setHorizonColor(1.0f, 0.545f, 0.239f, 1.0f);
m_skyDome->setGroundColor(0.2117f, 0.286f, 0.15f, 1.0f);
sprintf(str, "%s/config/vegaprime/vpenv/cloud_scattered.inta", cp);
m_cloudLayer->setTextureFile(str);
m_cloudLayer->setTextureTiling(3.0f, 3.0f);
m_cloudLayer->setColor(0.96f, 0.98f, 0.98f, 1.0f);
m_cloudLayer->setElevation(3000.0f, 5000.0f);
m_cloudLayer->setTransitionRange(500.0f, 500.0f);
m_wind->setSpeed(100.0f);
m_snow->setEnable(false);
m_rain->setEnable(false);
break;
case 2: //阴天
m_env->setVisibilityColor(1.0f, 1.0f, 1.0f, 1.0f);
m_env->setVisibilityRangeOpaque(100000.0f);
m_sun->setHorizonColor(1.0f, 0.6f, 0.29f, 1.0f);
m_skyDome->setGroundColor(0.33f, 0.29f, 0.15f, 1.0f);
sprintf(str, "%s/config/vegaprime/vpenv/cloud_few.inta", cp);
m_cloudLayer->setTextureFile(str);
m_cloudLayer->setTextureTiling(5.0f, 5.0f);
m_cloudLayer->setColor(0.96f, 0.98f, 0.98f, 1.0f);
m_cloudLayer->setElevation(3000.0f, 5000.0f);
m_cloudLayer->setTransitionRange(500.0f, 500.0f);
m_wind->setSpeed(15.0f);
m_snow->setEnable(false);
m_rain->setEnable(false);
break;
case 3: //雾天
m_env->setVisibilityColor(0.75f, 0.75f, 0.75f, 1.0f);
m_env->setVisibilityRangeOpaque(5000.0f);
m_sun->setHorizonColor(1.0f, 0.6f, 0.29f, 1.0f);
m_skyDome->setGroundColor(0.8f, 0.82f, 0.83f, 1.0f);
sprintf(str, "%s/config/vegaprime/vpenv/cloud_overcast.inta", cp);
m_cloudLayer->setTextureFile(str);
m_cloudLayer->setTextureTiling(3.0f, 3.0f);
m_cloudLayer->setColor(0.69f, 0.75f, 0.77f, 1.0f);
m_cloudLayer->setElevation(500.0f, 3000.0f);
m_cloudLayer->setTransitionRange(500.0f, 500.0f);
m_wind->setSpeed(0.0f);
m_snow->setEnable(false);
m_rain->setEnable(false);
break;
case 4: //雨天
m_env->setVisibilityColor(0.40f, 0.43f, 0.45f, 1.0f);
m_env->setVisibilityRangeOpaque(50000.0f);
m_sun->setHorizonColor(0.65f, 0.45f, 0.25f, 1.0f);
m_skyDome->setGroundColor(0.33f, 0.29f, 0.15f, 1.0f);
sprintf(str, "%s/config/vegaprime/vpenv/cloud_storm.inta", cp);
m_cloudLayer->setTextureFile(str);
m_cloudLayer->setTextureTiling(3.0f, 3.0f);
m_cloudLayer->setColor(0.52f, 0.56f, 0.61f, 1.0f);
m_cloudLayer->setElevation(1000.0f, 4000.0f);
m_cloudLayer->setTransitionRange(500.0f, 500.0f);
m_wind->setSpeed(5.0f);
m_snow->setEnable(false);
m_rain->setEnable(true);
m_rain->setNumParticles( 500000 );
break;
case 5: // 雪天
m_env->setVisibilityColor(0.40f, 0.43f, 0.45f, 1.0f);
m_env->setVisibilityRangeOpaque(50000.0f);
m_sun->setHorizonColor(0.65f, 0.45f, 0.25f, 1.0f);
m_skyDome->setGroundColor(0.33f, 0.29f, 0.15f, 1.0f);
sprintf(str, "%s/config/vegaprime/vpenv/cloud_storm.inta", cp);
m_cloudLayer->setTextureFile(str);
m_cloudLayer->setTextureTiling(3.0f, 3.0f);
m_cloudLayer->setColor(0.52f, 0.56f, 0.61f, 1.0f);
m_cloudLayer->setElevation(1000.0f, 4000.0f);
m_cloudLayer->setTransitionRange(500.0f, 500.0f);
m_wind->setSpeed(5.0f);
m_snow->setEnable(true);
m_snow->setNumParticles( 500000);
m_rain->setEnable(false);
break;
default:
break;
}
}
//注意事项,雨雪的颗粒数可以控制效果,默认值的数目太小,效果不明显。
vpEnvSnow* pEnvSnow_myEnvSnow = new vpEnvSnow();
pEnvSnow_myEnvSnow->setName( "myEnvSnow" );
pEnvSnow_myEnvSnow->setEnable( false );
pEnvSnow_myEnvSnow->setColor( 1.000000f , 1.000000f , 1.000000f , 1.000000f );
pEnvSnow_myEnvSnow->setTextureBlendColor( 1.000000f , 1.000000f , 1.000000f , 1.000000f );
pEnvSnow_myEnvSnow->setTextureBlendMode( vpEnvFx::TEXTURE_BLEND_MODE_MODULATE );
pEnvSnow_myEnvSnow->setTextureFile( "" );
pEnvSnow_myEnvSnow->setNumParticles( 50000); //颗粒数需要设置较多,效果才明显
pEnvSnow_myEnvSnow->setEmitterBoxSize( 10 );
pEnvSnow_myEnvSnow->setInternalClipBoxEnable( false );
pEnvSnow_myEnvSnow->setInternalClipBoxSize( 2 );
PublicMember::CTS_s_pInstancesToUnref->push_back( pEnvSnow_myEnvSnow );
vpEnvRain* pEnvRain_myEnvRain = new vpEnvRain();
pEnvRain_myEnvRain->setName( "myEnvRain" );
pEnvRain_myEnvRain->setEnable( false );
pEnvRain_myEnvRain->setColor( 1.000000f , 1.000000f , 1.000000f , 1.000000f );
pEnvRain_myEnvRain->setTextureBlendColor( 1.000000f , 1.000000f , 1.000000f , 1.000000f );
pEnvRain_myEnvRain->setTextureBlendMode( vpEnvFx::TEXTURE_BLEND_MODE_MODULATE );
pEnvRain_myEnvRain->setTextureFile( "" );
pEnvRain_myEnvRain->setNumParticles( 50000 );
//颗粒数需要设置较多,效果才明显
pEnvRain_myEnvRain->setEmitterBoxSize( 10 );
pEnvRain_myEnvRain->setInternalClipBoxEnable( false );
pEnvRain_myEnvRain->setInternalClipBoxSize( 2 );
PublicMember::CTS_s_pInstancesToUnref->push_back( pEnvRain_myEnvRain );
//函数体
转载请注明原文地址: https://ju.6miu.com/read-1122949.html