0001: //-------------------------------------------------------------
0002: // File: main.h
0003: //
0004: // Desc: PRT
0005: // Copyright (c) 2004 IMAGIRE Takashi. All rights reserved.
0006: //-------------------------------------------------------------
0007: #pragma once
0008: 
0009: #define REDUCTION_MAPS 2
0010: 
0011: //-------------------------------------------------------------
0012: // 定義や定数
0013: //-------------------------------------------------------------
0014: // 現在の入力データを保存する構造体
0015: struct UserInput
0016: {
0017:     BOOL bRotateUp;
0018:     BOOL bRotateDown;
0019:     BOOL bRotateLeft;
0020:     BOOL bRotateRight;
0021:     BOOL bZoomIn;
0022:     BOOL bZoomOut;
0023:     BOOL bChangeShader;
0024:     
0025:     BOOL bShift;
0026: };
0027: 
0028: 
0029: 
0030: 
0031: //-------------------------------------------------------------
0032: // Name: class CMyD3DApplication
0033: // Desc: アプリケーションのクラス
0034: //-------------------------------------------------------------
0035: class CMyD3DApplication : public CD3DApplication
0036: {
0037:     enum{
0038:         L_MAX = 3,                          // 最大の計算次数
0039:         TEX_MAX = ((L_MAX+1)*(L_MAX+1)+3)/4,// PRTのテクスチャ枚数
0040:     };
0041:     
0042:     int                     m_iState;       // 状態変数
0043:     int                     m_iChangeState; // 状態変数
0044:     int                     m_iCount;       // 状態変数管理用時間変数
0045: 
0046:     int                     m_Shader;       // シェーダの種類
0047: 
0048:     CD3DMesh                *m_pMeshBg;
0049:             
0050:     // シェーダ
0051:     LPD3DXEFFECT            m_pEffect;      // エフェクト
0052:     D3DXHANDLE              m_hTechnique;   // テクニック
0053:     D3DXHANDLE              m_hmWVP;        // 変換行列
0054:     D3DXHANDLE              m_htSrcTex;     // テクスチャ
0055: 
0056:     // レンダリングターゲット
0057:     LPDIRECT3DSURFACE9      m_pMapZ;        // 深度バッファ
0058:     LPDIRECT3DTEXTURE9      m_pPosTex;      // 高さマップ
0059:     LPDIRECT3DSURFACE9      m_pPosSurf;     // 
0060:     LPDIRECT3DTEXTURE9      m_pPosLockTex;  // 
0061:     LPDIRECT3DSURFACE9      m_pPosLockSurf; // 
0062:     LPDIRECT3DTEXTURE9      m_pNormalTex;   // 法線マップ
0063:     LPDIRECT3DSURFACE9      m_pNormalSurf;  // 
0064:     LPDIRECT3DTEXTURE9      m_pNormalLockTex;   // 
0065:     LPDIRECT3DSURFACE9      m_pNormalLockSurf;  // 
0066:     LPDIRECT3DTEXTURE9      m_pFinalTex[TEX_MAX];// PRT テクスチャ
0067:     LPDIRECT3DSURFACE9      m_pFinalSurf[TEX_MAX];
0068:     LPDIRECT3DTEXTURE9      m_pReductionTex [REDUCTION_MAPS];       // 縮小バッファ
0069:     LPDIRECT3DSURFACE9      m_pReductionSurf[REDUCTION_MAPS];       // 縮小バッファ
0070:     LPDIRECT3DTEXTURE9      m_pMaskTex;         // 係数計算
0071: 
0072: 
0073:     // 通常の座標変換行列
0074:     D3DXMATRIX              m_mWorld;
0075:     D3DXMATRIX              m_mView;
0076:     D3DXMATRIX              m_mProj;
0077: 
0078:     FLOAT                   m_fLightRotX;   // ローカル座標系X軸回転
0079:     FLOAT                   m_fLightRotY;   // ローカル座標系Y軸回転
0080:     D3DXMATRIX              m_mLight;       // ライト用
0081: 
0082:     BOOL                    m_bLoadingApp;  // ロード中?
0083:     CD3DFont*               m_pFont;        // フォント
0084:     UserInput               m_UserInput;    // 入力データ
0085: 
0086:     FLOAT                   m_fWorldRotX;   // X軸回転
0087:     FLOAT                   m_fWorldRotY;   // Y軸回転
0088:     FLOAT                   m_fViewZoom;    // 視点の距離
0089: 
0090: protected:
0091:     virtual HRESULT OneTimeSceneInit();
0092:     virtual HRESULT InitDeviceObjects();
0093:     virtual HRESULT RestoreDeviceObjects();
0094:     virtual HRESULT InvalidateDeviceObjects();
0095:     virtual HRESULT DeleteDeviceObjects();
0096:     virtual HRESULT Render();
0097:     virtual HRESULT FrameMove();
0098:     virtual HRESULT FinalCleanup();
0099:     virtual HRESULT ConfirmDevice( D3DCAPS9*, DWORD, D3DFORMAT );
0100: 
0101:     // 位置、法線マップを作る
0102:     virtual int FrameMoveCreateMap();
0103:     virtual void RenderCreateMap();
0104:     // 拡散光の計算をする
0105:     virtual int FrameMoveFinalGathering();
0106:     virtual void RenderFinalGathering();
0107: 
0108:     HRESULT RenderText();
0109: 
0110:     void    UpdateInput( UserInput* pUserInput );
0111: public:
0112:     LRESULT MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam );
0113:     CMyD3DApplication();
0114:     virtual ~CMyD3DApplication();
0115: };
0116: 
0117: