飞飞世界论坛

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

昼夜系统

[复制链接]

197

主题

203

帖子

1058

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1058
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:46:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.
5 X, L1 ?+ J4 |% Z, [% X你走在 world.h( w0 f3 w7 p8 d9 a4 O
晚上搜索
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...
3 @) K8 G6 v) M  T) e! n5 f# ~
下面插入
Code:
        bool                   IsNight();
        FLOAT                  GetRealTime();
  F* Y! u1 \9 D% S3 y
然后你进入1 Z7 {1 P- D7 J" p5 B
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;
}

# g- g4 M/ T; n9 w$ z0 C
下面插入
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
* z3 e0 f. |, i3 P
dadrunter set ihr
Code:
voidCWorld::SetLight( BOOL bLight )
7 B% d, v1 T8 ~" z/ Y' f; Z
在这个函数研究了
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
        {
6 u( r' A5 g0 N* q6 g6 G
后面添加
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

+ @# `& Y- {. |. {7 ^' [
现在你搜索
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;
# `+ G2 X5 f2 u$ n6 U# A% n
后面补充
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;
. v9 D6 b0 L1 X: N7 q3 S' D
然后在
neuz/versioncommon.h( }. ]# z9 o- y) \7 r5 e! b* {7 R1 X$ x
添加定义:
Code:
#define__DAY_NIGHT

( i" z' {, s. Z* P; S
Fertig
+ v8 f& R5 V1 G0 k& A4 p) x  L$ |: ?
9 o3 g% R9 E+ `" k/ s9 T
+ u! e: u5 m% j2 s
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-3 07:18 , Processed in 0.062390 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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