0001: 
0002: #include <d3d9.h>
0003: #include <d3dx9.h>
0004: 
0005: 
0006: #ifndef _RENDER_H_
0007: #define _RENDER_H_
0008: 
0009: namespace Render {
0010: 
0011: // ---------------------------------------------------------------------------
0012: // レンダリングするフレームバッファのサイズ
0013: // ---------------------------------------------------------------------------
0014: #if 0
0015:     enum{
0016:         RENDER_WIDTH  = 32,
0017:         RENDER_HEIGHT = 32,
0018:     };
0019: #else
0020: #if 1
0021:     enum{
0022:         RENDER_WIDTH  = 256,
0023:         RENDER_HEIGHT = 256,
0024:     };
0025: #else
0026:     enum{
0027:         RENDER_WIDTH  = 512,
0028:         RENDER_HEIGHT = 512,
0029:     };
0030: #endif
0031: 
0032: #endif
0033: 
0034: // ---------------------------------------------------------------------------
0035: // 外部から読み込む関数
0036: // ---------------------------------------------------------------------------
0037: void Init();            // 初期化
0038: void Delete();          // 後片付け
0039: void Render();          // 描画
0040: char *GetDataPointer(); // フレームバッファの所得
0041: 
0042: // ---------------------------------------------------------------------------
0043: // 置けるオブジェクトの種類
0044: // ---------------------------------------------------------------------------
0045: enum {
0046:     OBJ_TYPE_SPHERE = 0,
0047:     OBJ_TYPE_TRIANGLE,
0048: };
0049: // ---------------------------------------------------------------------------
0050: // 初期化等のためのデータ
0051: // ---------------------------------------------------------------------------
0052: 
0053: // 質感
0054: typedef struct{
0055:     float   COLOR_AMB[4];   // 環境色
0056:     float   COLOR_DIF[4];   // 拡散色
0057:     float   COLOR_SPE[4];   // 鏡面反射色
0058:     float   speq_power;     // 鏡面反射の強さ
0059: }Material;
0060: // ---------------------------------------------------------------------------
0061: typedef struct{
0062:     int type;
0063: 
0064:     Material material;
0065:     
0066:     struct{
0067:         // 3角形
0068:         float x0[3];    // 座標1
0069:         float x1[3];    // 座標2
0070:         float x2[3];    // 座標3
0071:     } triangle;
0072:     struct {
0073:         // 玉用
0074:         float center[3];// 中心
0075:         float radius;   // 半径
0076:     } sphere;
0077: 
0078: }OBJ_DATA;
0079: 
0080: // ---------------------------------------------------------------------------
0081: class CObject
0082: {
0083: public:
0084:     enum {
0085:         INFINTY_DIST = 10000,   // 無限大とみなせる程度の距離
0086:     };
0087:     int m_type;                 // OBJ_TYPE_????
0088:     Material m_material;        // 質感
0089: 
0090:     // 初期化
0091:     void Init(OBJ_DATA *pData);
0092:     // 交差したか
0093:     float IsAcross(D3DXVECTOR4 *n, D3DXVECTOR4 *p, const D3DXVECTOR4 *x, const D3DXVECTOR4 *v){return INFINTY_DIST;}
0094:     // 質感データから、オブジェクトの色を得る
0095:     D3DXVECTOR3 *GetColor(D3DXVECTOR3 *dest, float LN, float HN );
0096: };
0097: // ---------------------------------------------------------------------------
0098: // 球
0099: // ---------------------------------------------------------------------------
0100: class CSphere : public CObject
0101: {
0102: private:
0103:     D3DXVECTOR4 center; // 中心
0104:     float radius_sq;    // 半径
0105: 
0106: public:
0107:     CSphere();
0108: 
0109:     void Init(OBJ_DATA *pData);
0110:     float IsAcross(D3DXVECTOR4 *n, D3DXVECTOR4 *p, const D3DXVECTOR4 *x, const D3DXVECTOR4 *v);
0111: };
0112: 
0113: // ---------------------------------------------------------------------------
0114: // 3角形
0115: // ---------------------------------------------------------------------------
0116: class CTriangle : public CObject
0117: {
0118: private:
0119:     D3DXVECTOR4 pos[3];         // 頂点座標
0120:     D3DXVECTOR4 normal;         // 法線ベクトル
0121: 
0122: public:
0123:     CTriangle();
0124: 
0125:     void Init(OBJ_DATA *pData);
0126:     float IsAcross(D3DXVECTOR4 *n, D3DXVECTOR4 *p, const D3DXVECTOR4 *x, const D3DXVECTOR4 *v);
0127: };
0128: 
0129: };// namespace Render
0130: 
0131: #endif // !_RENDER_H_
0132: