// WeatherManager.cpp: implementation of the CWeatherManager class. // ////////////////////////////////////////////////////////////////////// #include "WeatherManager.h" #include "BaseDataDefine.h" #include "RenderOption.h" #include "SectorScene.h" #include "SceneManager.h" #include "SceneStateMgr.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CWeatherManager::CSubWeatherData::CSubWeatherData() { m_pGrassTexture = NULL; } CWeatherManager::CSubWeatherData::~CSubWeatherData() { if(m_pGrassTexture) { delete m_pGrassTexture; m_pGrassTexture = NULL; } } CWeatherManager::CWeatherManager() { ZeroMemory(&m_SunLight,sizeof(D3DLIGHT8)); m_SunLight.Type=D3DLIGHT_DIRECTIONAL; m_SunLight.Diffuse.r = 1.0f; m_SunLight.Diffuse.g = 1.0f; m_SunLight.Diffuse.b = 1.0f; m_SunLight.Position.x = 1.0f; m_SunLight.Position.y = 0.0f; m_SunLight.Position.z = 0.0f; m_SunLight.Direction.x = 1.0f; m_SunLight.Direction.y = 1.0f; m_SunLight.Direction.z = 1.0f; m_SunLight.Range = 1000.0f; m_pSubWeatherTable = NULL; m_bSubTable = false; m_pWeaterTableRaw = NULL; m_fInterpol = 0.0f; m_iSubCurrentIndex = 0; m_iBeforeCurrentIndex = 0; if(Load()==false) { //´ë³·~ m_SkyCenterColor[0].a=255; m_SkyCenterColor[0].r=56; m_SkyCenterColor[0].g=80; m_SkyCenterColor[0].b=175; m_SkyNeighborColor[0].a=255; m_SkyNeighborColor[0].r=175; m_SkyNeighborColor[0].g=224; m_SkyNeighborColor[0].b=250; m_FogColor[0].a=255; m_FogColor[0].r=190; m_FogColor[0].g=210; m_FogColor[0].b=220; m_LightColor[0].a=0xff; m_LightColor[0].r=200; m_LightColor[0].g=200; m_LightColor[0].b=200; m_AmbientColor[0].a=0xff; m_AmbientColor[0].r=70; m_AmbientColor[0].g=70; m_AmbientColor[0].b=70; m_FogRangeNear[0]=1.0f; m_FogRangeFar[0]=100000.0f; m_SkyFogFar[0]=400000.0f; m_FogLayer[0][0].c=0xffffffff; m_FogLayer[0][1].c=0xffffffff; m_FogLayer[0][2].c=0xffffffff; m_SunPosition[0]=(3.1415f/3.0f)*2.0f-0.1f; m_ObjectAmbientColor[0].c=0xffaaaaaa; //³ëÀ» ³ë¶õ»ö m_SkyCenterColor[1].a=255; m_SkyCenterColor[1].r=62; m_SkyCenterColor[1].g=3; m_SkyCenterColor[1].b=105; m_SkyNeighborColor[1].a=255; m_SkyNeighborColor[1].r=62; m_SkyNeighborColor[1].g=3; m_SkyNeighborColor[1].b=105; m_FogColor[1].a=255; m_FogColor[1].r=248; m_FogColor[1].g=226; m_FogColor[1].b=141; m_LightColor[1].a=0xff; m_LightColor[1].r=240; m_LightColor[1].g=126; m_LightColor[1].b=041; m_AmbientColor[1].a=0xff; m_AmbientColor[1].r=10; m_AmbientColor[1].g=10; m_AmbientColor[1].b=10; m_FogRangeNear[1]=70000.0f; m_FogRangeFar[1]=400000.0f; m_FogRangeFar[1]=100000.0f; m_SkyFogFar[1]=400000.0f; m_FogLayer[1][0].c=0xffdf7600; m_FogLayer[1][1].c=0xfff8e28d; m_FogLayer[1][2].c=0xff000000; m_SunPosition[1]=3.1415f; m_ObjectAmbientColor[1].c=0xffddaaaa; ///³ëÀ» »¡°£»ö m_SkyCenterColor[2].a=255; m_SkyCenterColor[2].r=3; m_SkyCenterColor[2].g=18; m_SkyCenterColor[2].b=54; m_SkyNeighborColor[2].a=255; m_SkyNeighborColor[2].r=3; m_SkyNeighborColor[2].g=18; m_SkyNeighborColor[2].b=54; m_FogColor[2].a=255; m_FogColor[2].r=215; m_FogColor[2].g=84; m_FogColor[2].b=13; m_LightColor[2].a=0xff; m_LightColor[2].r=60; m_LightColor[2].g=36; m_LightColor[2].b=011; m_AmbientColor[2].a=0xff; m_AmbientColor[2].r=3; m_AmbientColor[2].g=3; m_AmbientColor[2].b=3; m_FogRangeNear[2]=70000.0f; m_FogRangeFar[2]=400000.0f; m_FogRangeFar[2]=100000.0f; m_SkyFogFar[2]=400000.0f; m_FogLayer[2][0].c=0xffbf5600; m_FogLayer[2][1].c=0xfff5c26d; m_FogLayer[2][2].c=0xff000000; m_SunPosition[2]=3.1415f+0.5; m_ObjectAmbientColor[2].c=0xff555555; //³ëÀ» - ¾à°£ ÆÄ¶õ»ö m_SkyCenterColor[3].a=255; m_SkyCenterColor[3].r=0; m_SkyCenterColor[3].g=0; m_SkyCenterColor[3].b=0; m_SkyNeighborColor[3].a=255; m_SkyNeighborColor[3].r=0; m_SkyNeighborColor[3].g=0; m_SkyNeighborColor[3].b=0; m_FogColor[3].a=255; m_FogColor[3].r=8; m_FogColor[3].g=26; m_FogColor[3].b=42; m_LightColor[3].a=0xff; m_LightColor[3].r=15; m_LightColor[3].g=15; m_LightColor[3].b=40; m_AmbientColor[3].a=0xff; m_AmbientColor[3].r=15; m_AmbientColor[3].g=15; m_AmbientColor[3].b=40; m_FogRangeNear[3]=1000.0f; m_FogRangeFar[3]=400000.0f; m_FogRangeFar[3]=100000.0f; m_SkyFogFar[3]=400000.0f; m_FogLayer[3][0].c=0xff000000; m_FogLayer[3][1].c=0xff000000; m_FogLayer[3][2].c=0xff000000; m_SunPosition[3]=3.1415f+1.0f; m_ObjectAmbientColor[2].c=0xff333333; //¹ã m_SkyCenterColor[4].a=255; m_SkyCenterColor[4].r=8; m_SkyCenterColor[4].g=26; m_SkyCenterColor[4].b=72; m_SkyNeighborColor[4].a=255; m_SkyNeighborColor[4].r=8; m_SkyNeighborColor[4].g=26; m_SkyNeighborColor[4].b=72; m_FogColor[4].a=255; m_FogColor[4].r=0; m_FogColor[4].g=0; m_FogColor[4].b=0; m_LightColor[4].a=0xff; m_LightColor[4].r=15; m_LightColor[4].g=15; m_LightColor[4].b=40; m_AmbientColor[4].a=0xff; m_AmbientColor[4].r=15; m_AmbientColor[4].g=15; m_AmbientColor[4].b=40; m_FogRangeNear[4]=1000.0f; m_FogRangeFar[4]=400000.0f; m_FogRangeFar[4]=100000.0f; m_SkyFogFar[4]=400000.0f; m_FogLayer[4][0].c=0xff000000; m_FogLayer[4][1].c=0xff000000; m_FogLayer[4][2].c=0xff000000; m_SunPosition[4]=3.1415f+(3.1415f/2.0f); m_ObjectAmbientColor[2].c=0xff222222; //»õº®¾à°£ ÆÄ¶õ»ö m_SkyCenterColor[5].a=255; m_SkyCenterColor[5].r=0; m_SkyCenterColor[5].g=0; m_SkyCenterColor[5].b=0; m_SkyNeighborColor[5].a=255; m_SkyNeighborColor[5].r=0; m_SkyNeighborColor[5].g=0; m_SkyNeighborColor[5].b=0; m_FogColor[5].a=255; m_FogColor[5].r=8; m_FogColor[5].g=26; m_FogColor[5].b=42; m_LightColor[5].a=0xff; m_LightColor[5].r=15; m_LightColor[5].g=15; m_LightColor[5].b=40; m_AmbientColor[5].a=0xff; m_AmbientColor[5].r=15; m_AmbientColor[5].g=15; m_AmbientColor[5].b=40; m_FogRangeNear[5]=1000.0f; m_FogRangeFar[5]=400000.0f; m_FogRangeFar[5]=100000.0f; m_SkyFogFar[5]=400000.0f; m_FogLayer[5][0].c=0xff000000; m_FogLayer[5][1].c=0xff000000; m_FogLayer[5][2].c=0xff000000; m_SunPosition[5]=0.0f; m_ObjectAmbientColor[5].c=0xff555555; //¾ÆÄ§ ³ë¶õ»ö m_SkyCenterColor[6].a=255; m_SkyCenterColor[6].r=11; m_SkyCenterColor[6].g=2; m_SkyCenterColor[6].b=53; m_SkyNeighborColor[6].a=255; m_SkyNeighborColor[6].r=11; m_SkyNeighborColor[6].g=2; m_SkyNeighborColor[6].b=53; m_FogColor[6].a=255; m_FogColor[6].r=154; m_FogColor[6].g=134; m_FogColor[6].b=109; m_LightColor[6].a=0xff; m_LightColor[6].r=140; m_LightColor[6].g=140; m_LightColor[6].b=140; m_AmbientColor[6].a=0xff; m_AmbientColor[6].r=30; m_AmbientColor[6].g=30; m_AmbientColor[6].b=30; m_FogRangeNear[6]=70000.0f; m_FogRangeFar[6]=400000.0f; m_FogRangeFar[6]=100000.0f; m_SkyFogFar[6]=400000.0f; m_FogLayer[6][0].c=0xffc8c8ff; m_FogLayer[6][1].c=0xffc8c8ff; m_FogLayer[6][2].c=0xff88724d; m_SunPosition[6]=3.14f/5.0f; m_ObjectAmbientColor[6].c=0xff777777; } m_CustomWaterColor=false; } CWeatherManager::~CWeatherManager() { if(m_pSubWeatherTable) { delete[] m_pSubWeatherTable; m_pSubWeatherTable = NULL; } if(m_pWeaterTableRaw) { delete[] m_pWeaterTableRaw; m_pWeaterTableRaw = NULL; } } void CWeatherManager::Create() { m_SkyScene.Create(); m_SunScene.Create(); // m_FallScene.Create(); // m_CloudScene.Create(); } void CWeatherManager::RenderEnv(LPDIRECT3DDEVICE8 pd3dDevice) { pd3dDevice->LightEnable(0,FALSE); CSceneStateMgr::_SetD3DRenderState( D3DRS_LIGHTING,FALSE); CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGSTART, *((DWORD *)(&m_InterFogNear)) ); CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGEND, *((DWORD *)(&m_InterSkyFogFar)) ); CSceneStateMgr::_SetD3DTextureStageState(0, D3DTSS_ADDRESSU, D3DTADDRESS_WRAP); CSceneStateMgr::_SetD3DTextureStageState(0, D3DTSS_ADDRESSV, D3DTADDRESS_WRAP); matrix matInit; matInit.MakeIdent(); pd3dDevice->SetTransform(D3DTS_WORLD,(D3DMATRIX*)(&matInit)); m_SkyScene.Render(pd3dDevice); //m_SunScene.Render(pd3dDevice); pd3dDevice->SetTransform(D3DTS_WORLD,(D3DMATRIX*)(&matInit)); m_SkyScene.RenderCloud(pd3dDevice); pd3dDevice->SetTransform(D3DTS_WORLD,(D3DMATRIX*)(&matInit)); CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGEND, *((DWORD *)(&m_InterFogFar)) ); CSceneStateMgr::_SetD3DRenderState( D3DRS_LIGHTING,TRUE); pd3dDevice->LightEnable(0,TRUE); } void CWeatherManager::Render(LPDIRECT3DDEVICE8 pd3dDevice) { ///* pd3dDevice->LightEnable(0,FALSE); CSceneStateMgr::_SetD3DRenderState( D3DRS_LIGHTING,FALSE); CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGSTART, *((DWORD *)(&m_InterFogNear)) ); CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGEND, *((DWORD *)(&m_InterSkyFogFar)) ); CSceneStateMgr::_SetD3DTextureStageState(0, D3DTSS_ADDRESSU, D3DTADDRESS_WRAP); CSceneStateMgr::_SetD3DTextureStageState(0, D3DTSS_ADDRESSV, D3DTADDRESS_WRAP); matrix matInit; matInit.MakeIdent(); pd3dDevice->SetTransform(D3DTS_WORLD,(D3DMATRIX*)(&matInit)); m_SkyScene.Render(pd3dDevice); m_SunScene.Render(pd3dDevice); pd3dDevice->SetTransform(D3DTS_WORLD,(D3DMATRIX*)(&matInit)); m_SkyScene.RenderCloud(pd3dDevice); pd3dDevice->SetTransform(D3DTS_WORLD,(D3DMATRIX*)(&matInit)); CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGEND, *((DWORD *)(&m_InterFogFar)) ); CSceneStateMgr::_SetD3DRenderState( D3DRS_LIGHTING,TRUE); pd3dDevice->LightEnable(0,TRUE); //*/ } int CWeatherManager::GetSubWeatherNum(vector3 *vecPos) { if(vecPos == NULL || m_bSubTable == false) { return -1; } float indexx=(vecPos->x/SECTORSIZE) -1.0f; float indexy=(vecPos->z/SECTORSIZE) -1.0f; indexx /= 11.0f; indexy /= 11.0f; if(indexx < 0.0f) indexx = 0.0f; if(indexx > 1.0f) indexx = 1.0f; if(indexy < 0.0f) indexy = 0.0f; if(indexy > 1.0f) indexy = 1.0f; int ix = 512 *indexx; int iy = 512 *indexy; if(ix < 0) ix = 0; if(ix >= 512) ix = 511; if(iy < 0) iy = 0; if(iy >= 512) iy = 511; return m_pWeaterTableRaw[iy * 512 + ix]; } CTexture *CWeatherManager::GetCurrentSubGrassTexture() { if(m_bSubTable) { if(m_pSubWeatherTable[m_iSubCurrentIndex].m_pGrassTexture) { return m_pSubWeatherTable[m_iSubCurrentIndex].m_pGrassTexture; } } return NULL; } void CWeatherManager::SetWeather(float fTime,LPDIRECT3DDEVICE8 pd3dDevice) { if(m_CustomWaterColor) { int nLastWeatherTime=(int)m_fWeatherTime; int nWeatherEffectTime=24; color dwFogLayerColor[3]; color AmbientColor,LightColor,FogColor,SkyCenterColor,SkyNeighborColor; float fFogStart,fFogEnd,fSkyFogFar; float fSunTime=fTime; AmbientColor=color::Interpolation(m_AmbientColor[nLastWeatherTime],m_AmbientColor[nWeatherEffectTime],m_CustomWaterRate); LightColor=color::Interpolation(m_LightColor[nLastWeatherTime],m_LightColor[nWeatherEffectTime],m_CustomWaterRate); FogColor=color::Interpolation(m_FogColor[nLastWeatherTime],m_FogColor[nWeatherEffectTime],m_CustomWaterRate); SkyCenterColor=color::Interpolation(m_SkyCenterColor[nLastWeatherTime],m_SkyCenterColor[nWeatherEffectTime],m_CustomWaterRate); SkyNeighborColor=color::Interpolation(m_SkyNeighborColor[nLastWeatherTime],m_SkyNeighborColor[nWeatherEffectTime],m_CustomWaterRate); fFogStart=m_FogRangeNear[nLastWeatherTime]+(m_FogRangeNear[nWeatherEffectTime]-m_FogRangeNear[nLastWeatherTime])*(m_CustomWaterRate-(int)m_CustomWaterRate); fFogEnd=m_FogRangeFar[nLastWeatherTime]+(m_FogRangeFar[nWeatherEffectTime]-m_FogRangeFar[nLastWeatherTime])*(m_CustomWaterRate-(int)m_CustomWaterRate); fSkyFogFar=m_SkyFogFar[nLastWeatherTime]+(m_SkyFogFar[nWeatherEffectTime]-m_SkyFogFar[nLastWeatherTime])*(m_CustomWaterRate-(int)m_CustomWaterRate); m_InterObjectAmbientColor=color::Interpolation(m_ObjectAmbientColor[nLastWeatherTime],m_ObjectAmbientColor[nWeatherEffectTime],m_CustomWaterRate); dwFogLayerColor[0]=color::Interpolation(m_FogLayer[nLastWeatherTime][0],m_FogLayer[nWeatherEffectTime][0],m_CustomWaterRate); dwFogLayerColor[1]=color::Interpolation(m_FogLayer[nLastWeatherTime][1],m_FogLayer[nWeatherEffectTime][1],m_CustomWaterRate); dwFogLayerColor[2]=color::Interpolation(m_FogLayer[nLastWeatherTime][2],m_FogLayer[nWeatherEffectTime][2],m_CustomWaterRate); m_InterSpecularReflectionRate=color::Interpolation(m_SpecularReflectionRate[nLastWeatherTime],m_SpecularReflectionRate[nWeatherEffectTime],fTime); m_InterGrassColor=color::Interpolation(m_GrassColor[nLastWeatherTime],m_GrassColor[nWeatherEffectTime],fTime); m_InterGlareSkyUpper=color::Interpolation(m_GlareSkyUpper[nLastWeatherTime],m_GlareSkyUpper[nWeatherEffectTime],fTime); m_InterGlareSkyLower=color::Interpolation(m_GlareSkyLower[nLastWeatherTime],m_GlareSkyLower[nWeatherEffectTime],fTime); m_InterCharacterAmbient=color::Interpolation(m_CharacterAmbient[nLastWeatherTime],m_CharacterAmbient[nWeatherEffectTime],fTime); m_InterCharacterLight=color::Interpolation(m_CharacterLight[nLastWeatherTime],m_CharacterLight[nWeatherEffectTime],fTime); m_InterTerrainColor=color::Interpolation(m_TerrainColor[nLastWeatherTime],m_TerrainColor[nWeatherEffectTime],fTime); m_InterWaterColor=color::Interpolation(m_WaterColor[nLastWeatherTime],m_WaterColor[nWeatherEffectTime],fTime); m_InterFurGrassColor=color::Interpolation(m_FurGrassColor[nLastWeatherTime],m_FurGrassColor[nWeatherEffectTime],fTime); m_InterDetailFixColor = color::Interpolation(m_DetailFixColor[nLastWeatherTime],m_DetailFixColor[nWeatherEffectTime],fTime); m_SkyScene.SetColor(SkyNeighborColor.c,SkyNeighborColor.c,(DWORD*)dwFogLayerColor); if(m_ClearColor) m_ClearColor->c=FogColor.c; if(CRenderOption::m_FullSceneGlare) { m_ClearColor->c=0x0; m_GF3ClareColor.c=FogColor.c; } if(!pd3dDevice) { return; } CSceneStateMgr::_SetD3DRenderState( D3DRS_AMBIENT, AmbientColor.c); m_InterAmbientColor=AmbientColor; CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGENABLE, TRUE ); CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGCOLOR, FogColor.c); CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGTABLEMODE, D3DFOG_LINEAR ); CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGVERTEXMODE, D3DFOG_LINEAR ); CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGSTART, *((DWORD *)(&fFogStart)) ); CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGEND, *((DWORD *)(&fFogEnd)) ); m_InterSkyFogFar=fSkyFogFar; m_InterFogNear=fFogStart; m_InterFogFar=fFogEnd; float fAngle=cosf((fSunTime/24.0f)*3.14159f*2.0f); vector3 pos=vector3(0.5f,-fAngle,0.5f); pos.Normalize(); m_SunScene.SetSunDirection(pos); D3DLIGHT8 light; ZeroMemory( &light, sizeof(D3DLIGHT8) ); light.Type = D3DLIGHT_DIRECTIONAL; light.Diffuse.r = LightColor.r/255.0f; light.Diffuse.g = LightColor.g/255.0f; light.Diffuse.b = LightColor.b/255.0f; vector3 vecLight(-1.0f,-1.0f,-1.0f); vecLight.Normalize(); light.Position.x = light.Direction.x =vecLight.x; light.Position.y = light.Direction.y =vecLight.y; light.Position.z = light.Direction.z =vecLight.z; light.Range = 1000.0f; pd3dDevice->SetLight( 0,&light ); m_SunLight=light; return; } if(m_bSubTable == true) { int iCurrent; vector3 *ViewPos = CSceneManager::m_ViewCamera->GetPosition(); // CurrentRaw ±¸ÇÑ´Ù iCurrent = GetSubWeatherNum(ViewPos); CSubWeatherData *pTable = NULL; CSubWeatherData Interpol; int iMin = -1; int iValue; int iTarget; for(int ik= 0 ; ik < m_iSubWeatherTableNum; ik++) { iTarget = abs(iCurrent - m_pSubWeatherTable[ik].m_iIndex); if(ik == 0) { iMin = 0; iValue = iTarget; } else if(iTarget < iValue) { iValue = iTarget; iMin = ik; } } if(iMin != m_iSubCurrentIndex) { m_iBeforeCurrentIndex = m_iSubCurrentIndex; m_iSubCurrentIndex = iMin; m_fInterpol = 0.0f; } if(m_fInterpol >= 1.0f) { pTable = &(m_pSubWeatherTable[iMin]); } else { for(int iW = 0; iW < DAYCYCLE; iW++) { Interpol.m_SkyCenterColor[iW] = color::Interpolation(m_pSubWeatherTable[m_iBeforeCurrentIndex].m_SkyCenterColor[iW],m_pSubWeatherTable[m_iSubCurrentIndex].m_SkyCenterColor[iW],m_fInterpol); Interpol.m_SkyNeighborColor[iW] = color::Interpolation(m_pSubWeatherTable[m_iBeforeCurrentIndex].m_SkyNeighborColor[iW],m_pSubWeatherTable[m_iSubCurrentIndex].m_SkyNeighborColor[iW],m_fInterpol); Interpol.m_AmbientColor[iW] = color::Interpolation(m_pSubWeatherTable[m_iBeforeCurrentIndex].m_AmbientColor[iW],m_pSubWeatherTable[m_iSubCurrentIndex].m_AmbientColor[iW],m_fInterpol); Interpol.m_CharacterAmbient[iW] = color::Interpolation(m_pSubWeatherTable[m_iBeforeCurrentIndex].m_CharacterAmbient[iW],m_pSubWeatherTable[m_iSubCurrentIndex].m_CharacterAmbient[iW],m_fInterpol); Interpol.m_CharacterLight[iW] = color::Interpolation(m_pSubWeatherTable[m_iBeforeCurrentIndex].m_CharacterLight[iW],m_pSubWeatherTable[m_iSubCurrentIndex].m_CharacterLight[iW],m_fInterpol); Interpol.m_DetailFixColor[iW] = color::Interpolation(m_pSubWeatherTable[m_iBeforeCurrentIndex].m_DetailFixColor[iW],m_pSubWeatherTable[m_iSubCurrentIndex].m_DetailFixColor[iW],m_fInterpol); Interpol.m_FogColor[iW] = color::Interpolation(m_pSubWeatherTable[m_iBeforeCurrentIndex].m_FogColor[iW],m_pSubWeatherTable[m_iSubCurrentIndex].m_FogColor[iW],m_fInterpol); Interpol.m_FogLayer[iW][0] = color::Interpolation(m_pSubWeatherTable[m_iBeforeCurrentIndex].m_FogLayer[iW][0],m_pSubWeatherTable[m_iSubCurrentIndex].m_FogLayer[iW][0],m_fInterpol); Interpol.m_FogLayer[iW][1] = color::Interpolation(m_pSubWeatherTable[m_iBeforeCurrentIndex].m_FogLayer[iW][1],m_pSubWeatherTable[m_iSubCurrentIndex].m_FogLayer[iW][1],m_fInterpol); Interpol.m_FogLayer[iW][2] = color::Interpolation(m_pSubWeatherTable[m_iBeforeCurrentIndex].m_FogLayer[iW][2],m_pSubWeatherTable[m_iSubCurrentIndex].m_FogLayer[iW][2],m_fInterpol); Interpol.m_FurGrassColor[iW] = color::Interpolation(m_pSubWeatherTable[m_iBeforeCurrentIndex].m_FurGrassColor[iW],m_pSubWeatherTable[m_iSubCurrentIndex].m_FurGrassColor[iW],m_fInterpol); Interpol.m_GlareSkyLower[iW] = color::Interpolation(m_pSubWeatherTable[m_iBeforeCurrentIndex].m_GlareSkyLower[iW],m_pSubWeatherTable[m_iSubCurrentIndex].m_GlareSkyLower[iW],m_fInterpol); Interpol.m_GlareSkyUpper[iW] = color::Interpolation(m_pSubWeatherTable[m_iBeforeCurrentIndex].m_GlareSkyUpper[iW],m_pSubWeatherTable[m_iSubCurrentIndex].m_GlareSkyUpper[iW],m_fInterpol); Interpol.m_LightColor[iW] = color::Interpolation(m_pSubWeatherTable[m_iBeforeCurrentIndex].m_LightColor[iW],m_pSubWeatherTable[m_iSubCurrentIndex].m_LightColor[iW],m_fInterpol); Interpol.m_ObjectAmbientColor[iW] = color::Interpolation(m_pSubWeatherTable[m_iBeforeCurrentIndex].m_ObjectAmbientColor[iW],m_pSubWeatherTable[m_iSubCurrentIndex].m_ObjectAmbientColor[iW],m_fInterpol); Interpol.m_SpecularReflectionRate[iW] = color::Interpolation(m_pSubWeatherTable[m_iBeforeCurrentIndex].m_SpecularReflectionRate[iW],m_pSubWeatherTable[m_iSubCurrentIndex].m_SpecularReflectionRate[iW],m_fInterpol); Interpol.m_GrassColor[iW] = color::Interpolation(m_pSubWeatherTable[m_iBeforeCurrentIndex].m_GrassColor[iW],m_pSubWeatherTable[m_iSubCurrentIndex].m_GrassColor[iW],m_fInterpol); Interpol.m_TerrainColor[iW] = color::Interpolation(m_pSubWeatherTable[m_iBeforeCurrentIndex].m_TerrainColor[iW],m_pSubWeatherTable[m_iSubCurrentIndex].m_TerrainColor[iW],m_fInterpol); Interpol.m_WaterColor[iW] = color::Interpolation(m_pSubWeatherTable[m_iBeforeCurrentIndex].m_WaterColor[iW],m_pSubWeatherTable[m_iSubCurrentIndex].m_WaterColor[iW],m_fInterpol); Interpol.m_SunPosition[iW] = m_pSubWeatherTable[m_iSubCurrentIndex].m_SunPosition[iW]; Interpol.m_FogRangeFar[iW] = m_pSubWeatherTable[m_iBeforeCurrentIndex].m_FogRangeFar[iW] + ( m_pSubWeatherTable[m_iSubCurrentIndex].m_FogRangeFar[iW] - m_pSubWeatherTable[m_iBeforeCurrentIndex].m_FogRangeFar[iW]) * m_fInterpol; Interpol.m_FogRangeNear[iW] = m_pSubWeatherTable[m_iBeforeCurrentIndex].m_FogRangeNear[iW] + ( m_pSubWeatherTable[m_iSubCurrentIndex].m_FogRangeNear[iW] - m_pSubWeatherTable[m_iBeforeCurrentIndex].m_FogRangeNear[iW]) * m_fInterpol; Interpol.m_SkyFogFar[iW] = m_pSubWeatherTable[m_iBeforeCurrentIndex].m_SkyFogFar[iW] + ( m_pSubWeatherTable[m_iSubCurrentIndex].m_SkyFogFar[iW] - m_pSubWeatherTable[m_iBeforeCurrentIndex].m_SkyFogFar[iW]) * m_fInterpol; } m_fInterpol += 0.004f; pTable = &Interpol; } if(pTable == NULL) { //m_bSubTable = false; //SetWeather(fTime,pd3dDevice); pTable = &m_pSubWeatherTable[0]; } m_fWeatherTime=fTime; color dwFogLayerColor[3]; color AmbientColor,LightColor,FogColor,SkyCenterColor,SkyNeighborColor; float fFogStart,fFogEnd,fSkyFogFar; float fSunTime=fTime; const int REALDAYCYCLE=24; for(int i=0;i=i && fTime m_AmbientColor[i],pTable->m_AmbientColor[i+1],fTime); LightColor=color::Interpolation(pTable->m_LightColor[i],pTable->m_LightColor[i+1],fTime); FogColor=color::Interpolation(pTable->m_FogColor[i],pTable->m_FogColor[i+1],fTime); SkyCenterColor=color::Interpolation(pTable->m_SkyCenterColor[i],pTable->m_SkyCenterColor[i+1],fTime); SkyNeighborColor=color::Interpolation(pTable->m_SkyNeighborColor[i],pTable->m_SkyNeighborColor[i+1],fTime); fFogStart=pTable->m_FogRangeNear[i]+(pTable->m_FogRangeNear[i+1]-pTable->m_FogRangeNear[i])*(fTime-(int)fTime); fFogEnd=pTable->m_FogRangeFar[i]+(pTable->m_FogRangeFar[i+1]-pTable->m_FogRangeFar[i])*(fTime-(int)fTime); fSkyFogFar=pTable->m_SkyFogFar[i]+(pTable->m_SkyFogFar[i+1]-pTable->m_SkyFogFar[i])*(fTime-(int)fTime); /* if(m_SunPosition[i+1]==0.0f) { fSunTime=m_SunPosition[i]+(3.1415f*2.0f-m_SunPosition[i])*(fTime-(int)fTime); } else { fSunTime=m_SunPosition[i]+(m_SunPosition[i+1]-m_SunPosition[i])*(fTime-(int)fTime); } */ m_InterObjectAmbientColor=color::Interpolation(pTable->m_ObjectAmbientColor[i],pTable->m_ObjectAmbientColor[i+1],fTime); dwFogLayerColor[0]=color::Interpolation(pTable->m_FogLayer[i][0],pTable->m_FogLayer[i+1][0],fTime); dwFogLayerColor[1]=color::Interpolation(pTable->m_FogLayer[i][1],pTable->m_FogLayer[i+1][1],fTime); dwFogLayerColor[2]=color::Interpolation(pTable->m_FogLayer[i][2],pTable->m_FogLayer[i+1][2],fTime); m_InterSpecularReflectionRate=color::Interpolation(pTable->m_SpecularReflectionRate[i],pTable->m_SpecularReflectionRate[i+1],fTime); m_InterGrassColor=color::Interpolation(pTable->m_GrassColor[i],pTable->m_GrassColor[i+1],fTime); m_InterGlareSkyUpper=color::Interpolation(pTable->m_GlareSkyUpper[i],pTable->m_GlareSkyUpper[i+1],fTime); m_InterGlareSkyLower=color::Interpolation(pTable->m_GlareSkyLower[i],pTable->m_GlareSkyLower[i+1],fTime); m_InterCharacterAmbient=color::Interpolation(pTable->m_CharacterAmbient[i],pTable->m_CharacterAmbient[i+1],fTime); m_InterCharacterLight=color::Interpolation(pTable->m_CharacterLight[i],pTable->m_CharacterLight[i+1],fTime); m_InterTerrainColor=color::Interpolation(pTable->m_TerrainColor[i],pTable->m_TerrainColor[i+1],fTime); m_InterWaterColor=color::Interpolation(pTable->m_WaterColor[i],pTable->m_WaterColor[i+1],fTime); m_InterFurGrassColor=color::Interpolation(pTable->m_FurGrassColor[i],pTable->m_FurGrassColor[i+1],fTime); m_InterDetailFixColor = color::Interpolation(pTable->m_DetailFixColor[i],pTable->m_DetailFixColor[i+1],fTime); } } if(fTime>=REALDAYCYCLE-1) //if(DAYCYCLE-1 <= fTime) { fTime-=REALDAYCYCLE-1; AmbientColor=color::Interpolation(pTable->m_AmbientColor[DAYCYCLE-1],pTable->m_AmbientColor[0],fTime); LightColor=color::Interpolation(pTable->m_LightColor[DAYCYCLE-1],pTable->m_LightColor[0],fTime); FogColor=color::Interpolation(pTable->m_FogColor[DAYCYCLE-1],pTable->m_FogColor[0],fTime); SkyCenterColor=color::Interpolation(pTable->m_SkyCenterColor[DAYCYCLE-1],pTable->m_SkyCenterColor[0],fTime); SkyNeighborColor=color::Interpolation(pTable->m_SkyNeighborColor[DAYCYCLE-1],pTable->m_SkyNeighborColor[0],fTime); fFogStart=m_FogRangeNear[DAYCYCLE-1]+(pTable->m_FogRangeNear[0]-pTable->m_FogRangeNear[DAYCYCLE-1])*(fTime-(int)fTime); fFogEnd=m_FogRangeFar[DAYCYCLE-1]+(pTable->m_FogRangeFar[0]-pTable->m_FogRangeFar[DAYCYCLE-1])*(fTime-(int)fTime); fSkyFogFar=m_SkyFogFar[DAYCYCLE-1]+(pTable->m_SkyFogFar[0]-pTable->m_SkyFogFar[DAYCYCLE-1])*(fTime-(int)fTime); //fSunTime=m_SunPosition[DAYCYCLE-1]+(m_SunPosition[0]-m_SunPosition[DAYCYCLE-1])*(fTime-(int)fTime); m_InterObjectAmbientColor=color::Interpolation(pTable->m_ObjectAmbientColor[DAYCYCLE-1],pTable->m_ObjectAmbientColor[0],fTime); dwFogLayerColor[0]=color::Interpolation(pTable->m_FogLayer[DAYCYCLE-1][0],pTable->m_FogLayer[0][0],fTime); dwFogLayerColor[1]=color::Interpolation(pTable->m_FogLayer[DAYCYCLE-1][1],pTable->m_FogLayer[0][1],fTime); dwFogLayerColor[2]=color::Interpolation(pTable->m_FogLayer[DAYCYCLE-1][2],pTable->m_FogLayer[0][2],fTime); m_InterSpecularReflectionRate=color::Interpolation(pTable->m_SpecularReflectionRate[DAYCYCLE-1],pTable->m_SpecularReflectionRate[0],fTime); m_InterGrassColor=color::Interpolation(pTable->m_GrassColor[DAYCYCLE-1],pTable->m_GrassColor[0],fTime); m_InterGlareSkyUpper=color::Interpolation(pTable->m_GlareSkyUpper[DAYCYCLE-1],pTable->m_GlareSkyUpper[0],fTime); m_InterGlareSkyLower=color::Interpolation(pTable->m_GlareSkyLower[DAYCYCLE-1],pTable->m_GlareSkyLower[0],fTime); m_InterCharacterAmbient=color::Interpolation(pTable->m_CharacterAmbient[DAYCYCLE-1],pTable->m_CharacterAmbient[0],fTime); m_InterCharacterLight=color::Interpolation(pTable->m_CharacterLight[DAYCYCLE-1],pTable->m_CharacterLight[0],fTime); m_InterTerrainColor=color::Interpolation(pTable->m_TerrainColor[DAYCYCLE-1],pTable->m_TerrainColor[0],fTime); m_InterWaterColor=color::Interpolation(pTable->m_WaterColor[DAYCYCLE-1],pTable->m_WaterColor[0],fTime); m_InterFurGrassColor=color::Interpolation(pTable->m_FurGrassColor[DAYCYCLE-1],pTable->m_FurGrassColor[0],fTime); m_InterDetailFixColor = color::Interpolation(pTable->m_DetailFixColor[DAYCYCLE-1],pTable->m_DetailFixColor[0],fTime); } m_SkyScene.SetColor(SkyNeighborColor.c,SkyNeighborColor.c,(DWORD*)dwFogLayerColor); //m_CloudScene.SetColor(SkyNeighborColor.c,SkyNeighborColor.c,(DWORD*)dwFogLayerColor); if(m_ClearColor) m_ClearColor->c=FogColor.c; if(CRenderOption::m_FullSceneGlare) { if(m_ClearColor) m_ClearColor->c=0x0; m_GF3ClareColor.c=FogColor.c; } if(!pd3dDevice) { return; } CSceneStateMgr::_SetD3DRenderState( D3DRS_AMBIENT, AmbientColor.c); m_InterAmbientColor=AmbientColor; CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGENABLE, TRUE ); CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGCOLOR, FogColor.c); CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGTABLEMODE, D3DFOG_LINEAR ); CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGVERTEXMODE, D3DFOG_LINEAR ); CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGSTART, *((DWORD *)(&fFogStart)) ); CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGEND, *((DWORD *)(&fFogEnd)) ); m_InterSkyFogFar=fSkyFogFar; m_InterFogNear=fFogStart; m_InterFogFar=fFogEnd; /* if(m_SunPosition[i+1]==0.0f) { fSunTime=m_SunPosition[i]+(3.1415f*2.0f-m_SunPosition[i])*(fTime-(int)fTime); } else { fSunTime=m_SunPosition[i]+(m_SunPosition[i+1]-m_SunPosition[i])*(fTime-(int)fTime); } // Calc Sun position float x=sinf(fSunTime); float z=cosf(fSunTime); float y=0.0f; matrix matPosSun,matRotSun; matPosSun.Translation(vector3(x,y,z)); matRotSun.Rotation(vector3(1.0f,1.0f,1.0f),-3.1415f/3.0f); matPosSun=matPosSun*matRotSun; vector3 pos=matPosSun.GetLoc(); //vector3 pos=vector3(1.0f,1.0f,1.0f); */ //matRotSun.Rotation(vector3(1.0f,1.0f,1.0f),-3.1415f/3.0f); float fAngle=cosf((fSunTime/24.0f)*3.14159f*2.0f); vector3 pos=vector3(0.5f,-fAngle,0.5f); pos.Normalize(); //pos.Normalize(); m_SunScene.SetSunDirection(pos); D3DLIGHT8 light; ZeroMemory( &light, sizeof(D3DLIGHT8) ); light.Type = D3DLIGHT_DIRECTIONAL; light.Diffuse.r = LightColor.r/255.0f; light.Diffuse.g = LightColor.g/255.0f; light.Diffuse.b = LightColor.b/255.0f; /* light.Position.x = light.Direction.x = -pos.x; light.Position.y = light.Direction.y = -pos.y; light.Position.z = light.Direction.z = -pos.z; */ vector3 vecLight(-1.0f,-1.0f,-1.0f); vecLight.Normalize(); light.Position.x = light.Direction.x =vecLight.x; light.Position.y = light.Direction.y =vecLight.y; light.Position.z = light.Direction.z =vecLight.z; light.Range = 1000.0f; pd3dDevice->SetLight( 0,&light ); m_SunLight=light; light.Diffuse.r = m_InterTerrainColor.r/255.0f; light.Diffuse.g = m_InterTerrainColor.g/255.0f; light.Diffuse.b = m_InterTerrainColor.b/255.0f; m_TerrainLight=light; CSectorScene::m_TerrainDetailFixColor = m_InterDetailFixColor; } else { m_fWeatherTime=fTime; color dwFogLayerColor[3]; color AmbientColor,LightColor,FogColor,SkyCenterColor,SkyNeighborColor; float fFogStart,fFogEnd,fSkyFogFar; float fSunTime=fTime; const int REALDAYCYCLE=24; for(int i=0;i=i && fTime =REALDAYCYCLE-1) //if(DAYCYCLE-1 <= fTime) { fTime-=REALDAYCYCLE-1; AmbientColor=color::Interpolation(m_AmbientColor[DAYCYCLE-1],m_AmbientColor[0],fTime); LightColor=color::Interpolation(m_LightColor[DAYCYCLE-1],m_LightColor[0],fTime); FogColor=color::Interpolation(m_FogColor[DAYCYCLE-1],m_FogColor[0],fTime); SkyCenterColor=color::Interpolation(m_SkyCenterColor[DAYCYCLE-1],m_SkyCenterColor[0],fTime); SkyNeighborColor=color::Interpolation(m_SkyNeighborColor[DAYCYCLE-1],m_SkyNeighborColor[0],fTime); fFogStart=m_FogRangeNear[DAYCYCLE-1]+(m_FogRangeNear[0]-m_FogRangeNear[DAYCYCLE-1])*(fTime-(int)fTime); fFogEnd=m_FogRangeFar[DAYCYCLE-1]+(m_FogRangeFar[0]-m_FogRangeFar[DAYCYCLE-1])*(fTime-(int)fTime); fSkyFogFar=m_SkyFogFar[DAYCYCLE-1]+(m_SkyFogFar[0]-m_SkyFogFar[DAYCYCLE-1])*(fTime-(int)fTime); //fSunTime=m_SunPosition[DAYCYCLE-1]+(m_SunPosition[0]-m_SunPosition[DAYCYCLE-1])*(fTime-(int)fTime); m_InterObjectAmbientColor=color::Interpolation(m_ObjectAmbientColor[DAYCYCLE-1],m_ObjectAmbientColor[0],fTime); dwFogLayerColor[0]=color::Interpolation(m_FogLayer[DAYCYCLE-1][0],m_FogLayer[0][0],fTime); dwFogLayerColor[1]=color::Interpolation(m_FogLayer[DAYCYCLE-1][1],m_FogLayer[0][1],fTime); dwFogLayerColor[2]=color::Interpolation(m_FogLayer[DAYCYCLE-1][2],m_FogLayer[0][2],fTime); m_InterSpecularReflectionRate=color::Interpolation(m_SpecularReflectionRate[DAYCYCLE-1],m_SpecularReflectionRate[0],fTime); m_InterGrassColor=color::Interpolation(m_GrassColor[DAYCYCLE-1],m_GrassColor[0],fTime); m_InterGlareSkyUpper=color::Interpolation(m_GlareSkyUpper[DAYCYCLE-1],m_GlareSkyUpper[0],fTime); m_InterGlareSkyLower=color::Interpolation(m_GlareSkyLower[DAYCYCLE-1],m_GlareSkyLower[0],fTime); m_InterCharacterAmbient=color::Interpolation(m_CharacterAmbient[DAYCYCLE-1],m_CharacterAmbient[0],fTime); m_InterCharacterLight=color::Interpolation(m_CharacterLight[DAYCYCLE-1],m_CharacterLight[0],fTime); m_InterTerrainColor=color::Interpolation(m_TerrainColor[DAYCYCLE-1],m_TerrainColor[0],fTime); m_InterWaterColor=color::Interpolation(m_WaterColor[DAYCYCLE-1],m_WaterColor[0],fTime); m_InterFurGrassColor=color::Interpolation(m_FurGrassColor[DAYCYCLE-1],m_FurGrassColor[0],fTime); m_InterDetailFixColor = color::Interpolation(m_DetailFixColor[DAYCYCLE-1],m_DetailFixColor[0],fTime); } m_SkyScene.SetColor(SkyNeighborColor.c,SkyNeighborColor.c,(DWORD*)dwFogLayerColor); //m_CloudScene.SetColor(SkyNeighborColor.c,SkyNeighborColor.c,(DWORD*)dwFogLayerColor); if(m_ClearColor) m_ClearColor->c=FogColor.c; if(CRenderOption::m_FullSceneGlare) { if(m_ClearColor) m_ClearColor->c=0x0; m_GF3ClareColor.c=FogColor.c; } if(!pd3dDevice) { return; } CSceneStateMgr::_SetD3DRenderState( D3DRS_AMBIENT, AmbientColor.c); m_InterAmbientColor=AmbientColor; CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGENABLE, TRUE ); CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGCOLOR, FogColor.c); CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGTABLEMODE, D3DFOG_LINEAR ); CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGVERTEXMODE, D3DFOG_LINEAR ); CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGSTART, *((DWORD *)(&fFogStart)) ); CSceneStateMgr::_SetD3DRenderState( D3DRS_FOGEND, *((DWORD *)(&fFogEnd)) ); m_InterSkyFogFar=fSkyFogFar; m_InterFogNear=fFogStart; m_InterFogFar=fFogEnd; /* if(m_SunPosition[i+1]==0.0f) { fSunTime=m_SunPosition[i]+(3.1415f*2.0f-m_SunPosition[i])*(fTime-(int)fTime); } else { fSunTime=m_SunPosition[i]+(m_SunPosition[i+1]-m_SunPosition[i])*(fTime-(int)fTime); } // Calc Sun position float x=sinf(fSunTime); float z=cosf(fSunTime); float y=0.0f; matrix matPosSun,matRotSun; matPosSun.Translation(vector3(x,y,z)); matRotSun.Rotation(vector3(1.0f,1.0f,1.0f),-3.1415f/3.0f); matPosSun=matPosSun*matRotSun; vector3 pos=matPosSun.GetLoc(); //vector3 pos=vector3(1.0f,1.0f,1.0f); */ //matRotSun.Rotation(vector3(1.0f,1.0f,1.0f),-3.1415f/3.0f); float fAngle=cosf((fSunTime/24.0f)*3.14159f*2.0f); vector3 pos=vector3(0.5f,-fAngle,0.5f); pos.Normalize(); //pos.Normalize(); m_SunScene.SetSunDirection(pos); D3DLIGHT8 light; ZeroMemory( &light, sizeof(D3DLIGHT8) ); light.Type = D3DLIGHT_DIRECTIONAL; light.Diffuse.r = LightColor.r/255.0f; light.Diffuse.g = LightColor.g/255.0f; light.Diffuse.b = LightColor.b/255.0f; /* light.Position.x = light.Direction.x = -pos.x; light.Position.y = light.Direction.y = -pos.y; light.Position.z = light.Direction.z = -pos.z; */ vector3 vecLight(-1.0f,-1.0f,-1.0f); vecLight.Normalize(); light.Position.x = light.Direction.x =vecLight.x; light.Position.y = light.Direction.y =vecLight.y; light.Position.z = light.Direction.z =vecLight.z; light.Range = 1000.0f; pd3dDevice->SetLight( 0,&light ); m_SunLight=light; light.Diffuse.r = m_InterTerrainColor.r/255.0f; light.Diffuse.g = m_InterTerrainColor.g/255.0f; light.Diffuse.b = m_InterTerrainColor.b/255.0f; m_TerrainLight=light; CSectorScene::m_TerrainDetailFixColor = m_InterDetailFixColor; } } void CWeatherManager::LoadSubTable(int *Arr,int iNum) { char strRawName[256] = {0,}; char strSubTableName[256] = {0,}; char strGrassName[256] = {0,}; char *strPtr; FILE *fp = NULL; m_iSubWeatherTableNum = iNum; strcpy(strRawName,WEATHERPATH); strPtr = strrchr(strRawName,'.'); strPtr++; *(strPtr) = 'r'; strPtr++; *(strPtr) = 'a'; strPtr++; *(strPtr) = 'w'; strPtr++; fp = fopen(strRawName,"rb"); if(fp == NULL) { return; } m_pWeaterTableRaw = new unsigned char[RAWTABLESIZE * RAWTABLESIZE]; fread((void *)m_pWeaterTableRaw,sizeof(unsigned char) * RAWTABLESIZE * RAWTABLESIZE,1,fp); fclose(fp); if(Arr == NULL) return; m_pSubWeatherTable = new CSubWeatherData[iNum]; for(int ik = 0; ik < iNum; ik++ ) { int iCurrentIndex = Arr[ik]; memset(strSubTableName,0,sizeof(char) * 256); memset(strGrassName,0,sizeof(char) * 256); strcpy(strSubTableName,WEATHERPATH); strPtr = strrchr(strSubTableName,'.'); sprintf(strPtr,"_%d.dat",iCurrentIndex); fp = fopen(strSubTableName,"rb"); if(fp == NULL) { delete[] m_pSubWeatherTable; m_pSubWeatherTable = NULL; delete[] m_pWeaterTableRaw; m_pWeaterTableRaw = NULL; return; } m_pSubWeatherTable[ik].m_iIndex = iCurrentIndex; sprintf(strGrassName,"grass_%d.dds",iCurrentIndex); CTexture::SetPath(NATURETEXTUREPATH); char strTestGrass[256] = {0,}; sprintf(strTestGrass,"%s/%s",NATURETEXTUREPATH,strGrassName); FILE *fTest = fopen(strTestGrass,"rb"); if(fTest) { fclose(fTest); m_pSubWeatherTable[ik].m_pGrassTexture = new CTexture(); m_pSubWeatherTable[ik].m_pGrassTexture->Load(strGrassName); } else { m_pSubWeatherTable[ik].m_pGrassTexture = NULL; } DWORD color; float lens; char strNew[3]; fread((char *)&strNew,sizeof(char) * 3,1,fp); if(strNew[0] == 'N' && strNew[1] == 'E' && strNew[2] == 'W') { for(int i=0;iSetTransform(D3DTS_WORLD,(D3DMATRIX*)(&matInit)); m_SunScene.RenderFlare(pd3dDevice); }