飞飞世界论坛

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

昼夜系统

[复制链接]

197

主题

203

帖子

1054

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1054
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:46:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.+ [/ ~7 Q! [! H( M% m, }' \
你走在 world.h- T! z0 Z1 u/ q8 z: `
晚上搜索
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...

- s# n' d7 C7 f
下面插入
Code:
        bool                   IsNight();
        FLOAT                  GetRealTime();
! E: o4 l. t/ w2 |
然后你进入
1 {! ^) R- q3 L7 NWorld3D.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;
}

; G4 B0 G5 t! t# T& O1 b+ B
下面插入
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
6 \! T3 L) y8 N. R3 N+ e
dadrunter set ihr
Code:
voidCWorld::SetLight( BOOL bLight )

: d" S& q3 c; S5 W4 V, F
在这个函数研究了
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
        {

4 ^0 j* L1 B( a- l
后面添加
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

! N( J9 L' X3 p0 V+ c3 m
现在你搜索
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;

( O# x* A, U' m; T4 _# d
后面补充
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;
$ y) j; l0 K: g5 u
然后在
neuz/versioncommon.h
% R3 i6 {& e) {6 y; E7 h; |& ~添加定义:
Code:
#define__DAY_NIGHT

+ r3 v9 L* Z; C% Q+ |  r. U
Fertig
1 j1 e/ @' m) m5 G4 b
2 J" J; C- S: `- S* K# b
) G' m/ w" }+ d6 @2 X! k. B
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 06:33 , Processed in 0.074827 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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