1.
, |2 D8 Z. p Z5 p* _9 `你走在 world.h, Q- f0 G+ _+ @1 T( q
晚上搜索 Code: public: BOOL InitWorldEnvir(); // 24½Ã°£ Light ¼3ᤠ1×±aŸ èˉ°æ Ãê±aè* #if __VER >= 15// __GUILD_HOUSE void InProcessing(); // gmpbigsun : Çöàç¿ùμå·Î áøàԽà ÇÑ1ø è£Ãaμê void OutProcessing(); // gmpibgsun : Çöàç¿ùμå¿¡¼* Åeàå½Ã ÇÑ1ø è£Ãaμê #endif // Render void Projection(LPDIRECT3DDEVICE9 pd3dDevice, int nWidth, int nHeight ); void Render(LPDIRECT3DDEVICE9 pd3dDevice, CD3DFont* pFont = NULL ); void RenderBase(LPDIRECT3DDEVICE9 pd3dDevice, CD3DFont* pFont ); // Light, Camera and etc... - H& ?# D6 h/ n1 s* B0 ~& e4 l
下面插入 Code: bool IsNight(); FLOAT GetRealTime();
4 ]% S! i/ _& ?0 h! r- k( B( b然后你进入; i8 k# E2 N0 U& b2 Z, W
World3D.cpp 搜索 Code: // Ä«¸T¶ó Ãæμ1üũ½Ã¿¡¸¸ ¾2′Âμí.. BOOLCWorld::CheckBound(D3DXVECTOR3* vPos,D3DXVECTOR3* vDest,D3DXVECTOR3* vOut,FLOAT* fLength ) { D3DXVECTOR3 tempVec=(*(vPos)-*(vDest));///10.0f; floatlength=D3DXVec3Length(&tempVec); D3DXVec3Normalize(&tempVec,&tempVec); tempVec/=10; D3DXVECTOR3 tempVec2=*(vDest); D3DXVECTOR3 vDist1, vDist2; float tempheight; BOOL b1,b2; b1 = FALSE; b2 = FALSE; tempVec2 += (tempVec * 10); // Ä«¸T¶ó°¡ àú2ù áöÇü¿¡ 2¸μé¾î°¡¼* á»»°′ù. BOOL bWaterChkDn = FALSE; BOOL bWaterChkUp = FALSE; FLOAT fWaterHeight = 0.0f; LPWATERHEIGHT pWaterHeight =GetWaterHeight( *vDest ); if( pWaterHeight && ( pWaterHeight->byWaterTexture& (byte)(~MASK_WATERFRAME)) == WTYPE_WATER ) { fWaterHeight =(FLOAT)pWaterHeight->byWaterHeight; //vDest->y += 0.5f; if( fWaterHeight < vDest->y) { bWaterChkDn = TRUE; } else { bWaterChkUp = TRUE; } } for( int i = 0; i < int( length * 10 );i++ ) { tempVec2+=tempVec; tempheight=GetLandHeight(tempVec2.x, tempVec2.z ); #if __VER >= 11 //__FIX_PICKING // Ä«¸T¶ó¸| ¾à°£ ′õ μé¾îáÖ±aà§Çؼ* ¼öᤠ- 07.10.24 - micky if(tempVec2.y<tempheight+0.6f) #else if(tempVec2.y<tempheight+0.3f) #endif { b1 = TRUE; vDist1 = tempVec2 -*vDest; // »ç¶÷¿¡¼* ±3Â÷ᡱîáöàÇ1æÇao¤Åí // *(vOut)=tempVec2; // vOut->y+=1.1f; // return TRUE; break; } // Äé¸ˉÅí°¡ 1°à§¿¡ àÖ°í, àá±aáö¾ê¾ò′ù¸é ¼ö¸é Ãæμ1üũÇÏ¿© Ä«¸T¶ó°¡ 1°¼óืΠ¾èμé¾î°¡°Ô Ã3¸®ÇÔ. D3DXVECTOR3 vWaterVec = tempVec2; //vWaterVec.y+=0.5f; if( bWaterChkDn ) { if(vWaterVec.y<fWaterHeight+0.3f) { b1 = TRUE; vDist1 =vWaterVec - *vDest; break; } } #if __VER < 10 else // Äé¸ˉÅí°¡ 1°à§¿¡ àÖ°í, àá°å′ù¸é¼ö¸é Ãæμ1üũÇÏ¿© Ä«¸T¶ó°¡ 1°1ÛืΠ¸ø3a°¡°Ô Ã3¸®ÇÔ if( bWaterChkUp ) { if(vWaterVec.y>fWaterHeight-0.3f) { b1 = TRUE; vDist1 =vWaterVec - *vDest; break; } } #endif } D3DXVECTOR3 vIntersect; BOOL bRet = IntersectObjLine2(&vIntersect, *vDest, *vPos, TRUE ); if( bRet ) { b2 = TRUE; vDist2 = vIntersect - *vDest; // »ç¶÷¿¡¼* ±3Â÷ᡱîáöàÇ 1æÇao¤Åí // *vOut = vIntersect; } FLOAT fDist1,fDist2; if( b1 == TRUE && b2 == TRUE ) // áöÇüàì¶û ¿àoêá§Æ® ¸eμÎ ±3Â÷Çß′ù { fDist1 = D3DXVec3LengthSq(&vDist1 ); fDist2 = D3DXVec3LengthSq(&vDist2 ); if( fDist1 < fDist2 ) // ±×áß °¡±î¿î3eืΠ¾¸ { *fLength =D3DXVec3Length( &vDist1 ); *vOut = tempVec2; } else { *fLength =D3DXVec3Length( &vDist2 ); *vOut= vIntersect; } return TRUE; } else if( b1 ) //áöÇü¿¡¸¸ oÎμúÇû′ù. { *fLength = D3DXVec3Length(&vDist1 ); *vOut = tempVec2; return TRUE; } else if( b2 ) //¿àoêá§Æ®¿¡¸¸ oÎμúÇû′ù { *fLength = D3DXVec3Length(&vDist2 ); *vOut = vIntersect; return TRUE; } // ¾Æ1«μ¥μμ oÎμúè÷áö ¾ê¾ò′ù. *fLength = length; return FALSE; } ! X, ~3 c# w$ }/ s
下面插入 Code: #ifdef __CLIENT boolCWorld::IsNight(){ return (g_GameTimer.m_nHour-1 <= 6 || g_GameTimer.m_nHour-1 >= 18 ); } FLOATCWorld::GetRealTime() { FLOAT nRlTime = 0; nRlTime =(FLOAT)(g_GameTimer.m_nHour-1)*2; if(g_GameTimer.m_nMin < 30 ) --nRlTime; if(g_GameTimer.m_nHour-1 == 23 && g_GameTimer.m_nMin > 45 ) nRlTime+=0.5F; if( nRlTime >24 ) { return((-1)*(nRlTime - 48 )); } return nRlTime; } #endif
& d- Q J5 c% a+ N S, Q( x- ^dadrunter set ihr Code: voidCWorld::SetLight( BOOL bLight )
# w$ J3 y- {- v9 Z0 h. U' e& }在这个函数研究了 Code: pLight->SetDir(m_v3LightDir.x, m_v3LightDir.y, m_v3LightDir.z ); pLight->Appear(m_pd3dDevice, TRUE ); DWORD dwR, dwG, dwB; dwR = (DWORD)(pLight->Ambient.r * 255 ); dwG = (DWORD)(pLight->Ambient.g * 255 ); dwB = (DWORD)(pLight->Ambient.b * 255 ); dwAmbient =D3DCOLOR_ARGB( 255, dwR, dwG, dwB ); } } else { ; ?( u7 Q& [& |" q+ p
后面添加 Code: #ifdef __DAY_NIGHT if( !m_bIsIndoor){ m_fFogStartValue =10.0F; m_fFogEndValue = 70.0F + GetRealTime() * 30.0F; m_fFogDensity = 0.0F; m_v3LightDir.x = 0.0F; m_v3LightDir.y = -1.0F; m_v3LightDir.z = 0.0F; } #endif //__DAY_NIGHT 6 C3 w' T. w; F/ v& X
现在你搜索 Code: if( m_bIsIndoor ) { if( pLight ) { // ཿμ oˉè* pLight->Diffuse.r =((m_dwDiffuse>>16) & 0xff) / 255.f; pLight->Diffuse.g =((m_dwDiffuse>>8) & 0xff) /255.f; pLight->Diffuse.b =((m_dwDiffuse) & 0xff) / 255.f;
+ c( a1 T9 ~% f后面补充 Code: if( m_bIsIndoor #ifdef __DAY_NIGHT || IsNight() #endif //__DAY_NIGHT ) { if( pLight ) { // ཿμ oˉè* pLight->Diffuse.r =((m_dwDiffuse>>16) & 0xff) / 255.f; pLight->Diffuse.g =((m_dwDiffuse>>8) & 0xff) /255.f; pLight->Diffuse.b =((m_dwDiffuse) & 0xff) / 255.f;
% f5 f% J( a4 v1 n7 l5 w然后在 neuz/versioncommon.h% {. |6 |6 u& Q
添加定义: Code: #define__DAY_NIGHT
& y) Q" n3 l/ G1 CFertig" z, u8 \. E. K. q. C; u+ }
3 c/ _( t! Z2 X, \' x5 z
2 G5 L5 m3 t/ m% h8 ~5 c& w2 q; f |