| 1 |
#ifndef CENVPLUGIN_H_INCLUDED |
| 2 |
#define CENVPLUGIN_H_INCLUDED |
| 3 |
|
| 4 |
#include "CPlugin.h" |
| 5 |
#include "CLensFlare.h" |
| 6 |
|
| 7 |
/* |
| 8 |
* ライトセッティング |
| 9 |
*/ |
| 10 |
class CLightSetting{ |
| 11 |
friend class CEnvPlugin; |
| 12 |
private: |
| 13 |
float m_SunAlt; // 太陽高度 |
| 14 |
D3DCOLOR m_Directional; // 平行光源色 |
| 15 |
D3DCOLOR m_Ambient; // 環境光源色 |
| 16 |
D3DCOLOR m_SkyColor; // 空の色 |
| 17 |
public: |
| 18 |
char *Read(char *); |
| 19 |
bool operator<(const CLightSetting &rhs){ |
| 20 |
return m_SunAlt<rhs.m_SunAlt; |
| 21 |
} |
| 22 |
}; |
| 23 |
|
| 24 |
// 反復子 |
| 25 |
typedef list<CLightSetting>::iterator ILightSetting; |
| 26 |
|
| 27 |
/* |
| 28 |
* 衛星データ |
| 29 |
*/ |
| 30 |
class CMoon{ |
| 31 |
friend class CEnvPlugin; |
| 32 |
private: |
| 33 |
string m_MoonFile; // ファイル名 |
| 34 |
CMesh *m_MoonMesh; // メッシュ |
| 35 |
CObject m_MoonObject; // オブジェクト |
| 36 |
float m_MoonScale; // スケール |
| 37 |
float m_AxialInclination; // 公転軸の傾き |
| 38 |
float m_RevolutionPeriod; // 公転周期 |
| 39 |
float m_InitialPhase; // 初期位相 |
| 40 |
float m_RevolutionPerDay; // 1 日当たり公転角度 |
| 41 |
public: |
| 42 |
char *Read(char *); |
| 43 |
void LoadData(); |
| 44 |
void Render(double, float, VEC3, float); |
| 45 |
}; |
| 46 |
|
| 47 |
// 反復子 |
| 48 |
typedef list<CMoon>::iterator IMoon; |
| 49 |
|
| 50 |
/* |
| 51 |
* 環境プラグイン |
| 52 |
*/ |
| 53 |
class CEnvPlugin: public CPlugin{ |
| 54 |
private: |
| 55 |
float m_Latitude; // 緯度 |
| 56 |
string m_EnvMapTexFile; // 環境マップファイル名 |
| 57 |
LPTEX8 m_EnvMapTexture; // 環境マッピング |
| 58 |
string m_LandscapeFile; // 景観ファイル名 |
| 59 |
CMesh *m_LandscapeMesh; // 景観メッシュ |
| 60 |
CObject m_LandscapeObject; // 景観オブジェクト |
| 61 |
float m_LandscapeScale; // 景観スケール |
| 62 |
string m_SunFile; // 景観ファイル名 |
| 63 |
CMesh *m_SunMesh; // 景観メッシュ |
| 64 |
CObject m_SunObject; // 景観オブジェクト |
| 65 |
float m_SunScale; // 景観スケール |
| 66 |
float m_SunAxialInclination; // 地軸の傾き |
| 67 |
CLensFlare m_SunLensFlare; // 太陽レンズフレア |
| 68 |
CWhiteout m_SunWhiteout; // 太陽ホワイトアウト |
| 69 |
float m_NightThreshold; // 昼夜閾値 |
| 70 |
D3DCOLOR m_ShadowColor; // 影の色 |
| 71 |
list<CLightSetting> m_Light; // 光源設定 |
| 72 |
list<CMoon> m_Moon; // 月リスト |
| 73 |
public: |
| 74 |
CEnvPlugin(char *id): CPlugin(id){} |
| 75 |
~CEnvPlugin(){} |
| 76 |
char *DirName(){ return "Env"; } |
| 77 |
char *TextName2(){ return "Env2.txt"; } |
| 78 |
bool Load(); |
| 79 |
bool GetHemisphere(){ return m_Latitude<0.0f; } |
| 80 |
void SetPreview(); |
| 81 |
void SetEnvMapTexture(){ devSetTexture(1, m_EnvMapTexture); } |
| 82 |
void Render(double abstime = -1.0); |
| 83 |
void RenderAfter(); |
| 84 |
D3DCOLOR GetShadowColor(){ return m_ShadowColor; } |
| 85 |
CPLUGIN_CASTFUNC(CEnvPlugin); |
| 86 |
}; |
| 87 |
|
| 88 |
/* |
| 89 |
* 環境プラグインリスト |
| 90 |
*/ |
| 91 |
class CEnvPluginList: public CPluginList{ |
| 92 |
private: |
| 93 |
public: |
| 94 |
char *DirName(){ return "Env"; } |
| 95 |
char *TextName2(){ return "Env2.txt"; } |
| 96 |
char *Default(){ return "Default"; } |
| 97 |
CPlugin *NewEntry(char *id){ return new CEnvPlugin(id); } |
| 98 |
CPLUGINLIST_CASTFUNC(CEnvPlugin); |
| 99 |
}; |
| 100 |
|
| 101 |
// 外部グローバル |
| 102 |
extern float g_DayAlpha; |
| 103 |
extern float g_NightAlpha; |
| 104 |
extern D3DCOLOR g_NoLightColor; |
| 105 |
extern CEnvPlugin *g_Env; |
| 106 |
extern CEnvPlugin *g_DefaultEnv; |
| 107 |
extern CEnvPluginList *g_EnvPluginList; |
| 108 |
|
| 109 |
#endif |