飞飞世界论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 13784|回复: 0
打印 上一主题 下一主题

昼夜系统

[复制链接]

197

主题

203

帖子

1054

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1054
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:46:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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 C
Fertig" 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
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|飞飞世界技术论坛  

GMT+8, 2024-12-23 07:27 , Processed in 0.060729 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表