forked from metin2/client
313 lines
7.6 KiB
C++
313 lines
7.6 KiB
C++
#pragma once
|
||
|
||
#include "GrpDetector.h"
|
||
#include "Ray.h"
|
||
#include <vector>
|
||
|
||
void PixelPositionToD3DXVECTOR3(const D3DXVECTOR3& c_rkPPosSrc, D3DXVECTOR3* pv3Dst);
|
||
void D3DXVECTOR3ToPixelPosition(const D3DXVECTOR3& c_rv3Src, D3DXVECTOR3* pv3Dst);
|
||
|
||
class CGraphicTexture;
|
||
|
||
typedef WORD TIndex;
|
||
|
||
typedef struct SFace
|
||
{
|
||
TIndex indices[3];
|
||
} TFace;
|
||
|
||
typedef D3DXVECTOR3 TPosition;
|
||
|
||
typedef D3DXVECTOR3 TNormal;
|
||
|
||
typedef D3DXVECTOR2 TTextureCoordinate;
|
||
|
||
typedef DWORD TDiffuse;
|
||
typedef DWORD TAmbient;
|
||
typedef DWORD TSpecular;
|
||
|
||
typedef union UDepth
|
||
{
|
||
float f;
|
||
long l;
|
||
DWORD dw;
|
||
} TDepth;
|
||
|
||
typedef struct SVertex
|
||
{
|
||
float x, y, z;
|
||
DWORD color;
|
||
float u, v;
|
||
} TVertex;
|
||
|
||
struct STVertex
|
||
{
|
||
float x, y, z, rhw;
|
||
};
|
||
|
||
struct SPVertex
|
||
{
|
||
float x, y, z;
|
||
};
|
||
|
||
typedef struct SPDVertex
|
||
{
|
||
float x, y, z;
|
||
DWORD color;
|
||
} TPDVertex;
|
||
|
||
struct SPDTVertexRaw
|
||
{
|
||
float px, py, pz;
|
||
DWORD diffuse;
|
||
float u, v;
|
||
};
|
||
|
||
typedef struct SPTVertex
|
||
{
|
||
TPosition position;
|
||
TTextureCoordinate texCoord;
|
||
} TPTVertex;
|
||
|
||
typedef struct SPDTVertex
|
||
{
|
||
TPosition position;
|
||
TDiffuse diffuse;
|
||
TTextureCoordinate texCoord;
|
||
} TPDTVertex;
|
||
|
||
typedef struct SPNTVertex
|
||
{
|
||
TPosition position;
|
||
TNormal normal;
|
||
TTextureCoordinate texCoord;
|
||
} TPNTVertex;
|
||
|
||
typedef struct SPNT2Vertex
|
||
{
|
||
TPosition position;
|
||
TNormal normal;
|
||
TTextureCoordinate texCoord;
|
||
TTextureCoordinate texCoord2;
|
||
} TPNT2Vertex;
|
||
|
||
typedef struct SPDT2Vertex
|
||
{
|
||
TPosition position;
|
||
DWORD diffuse;
|
||
TTextureCoordinate texCoord;
|
||
TTextureCoordinate texCoord2;
|
||
} TPDT2Vertex;
|
||
|
||
typedef struct SNameInfo
|
||
{
|
||
DWORD name;
|
||
TDepth depth;
|
||
} TNameInfo;
|
||
|
||
typedef struct SBoundBox
|
||
{
|
||
float sx, sy, sz;
|
||
float ex, ey, ez;
|
||
int meshIndex;
|
||
int boneIndex;
|
||
} TBoundBox;
|
||
|
||
const WORD c_FillRectIndices[6] = { 0, 2, 1, 2, 3, 1 };
|
||
|
||
/*
|
||
enum EIndexCount
|
||
{
|
||
LINE_INDEX_COUNT = 2,
|
||
TRIANGLE_INDEX_COUNT = 2*3,
|
||
RECTANGLE_INDEX_COUNT = 2*4,
|
||
CUBE_INDEX_COUNT = 2*4*3,
|
||
FILLED_TRIANGLE_INDEX_COUNT = 3,
|
||
FILLED_RECTANGLE_INDEX_COUNT = 3*2,
|
||
FILLED_CUBE_INDEX_COUNT = 3*2*6,
|
||
};
|
||
*/
|
||
|
||
class CGraphicBase
|
||
{
|
||
public:
|
||
static DWORD GetAvailableTextureMemory();
|
||
static const D3DXMATRIX& GetViewMatrix();
|
||
static const D3DXMATRIX & GetIdentityMatrix();
|
||
|
||
enum
|
||
{
|
||
DEFAULT_IB_LINE,
|
||
DEFAULT_IB_LINE_TRI,
|
||
DEFAULT_IB_LINE_RECT,
|
||
DEFAULT_IB_LINE_CUBE,
|
||
DEFAULT_IB_FILL_TRI,
|
||
DEFAULT_IB_FILL_RECT,
|
||
DEFAULT_IB_FILL_CUBE,
|
||
DEFAULT_IB_NUM,
|
||
};
|
||
|
||
public:
|
||
CGraphicBase();
|
||
virtual ~CGraphicBase();
|
||
|
||
void SetSimpleCamera(float x, float y, float z, float pitch, float roll);
|
||
void SetEyeCamera(float xEye, float yEye, float zEye, float xCenter, float yCenter, float zCenter, float xUp, float yUp, float zUp);
|
||
void SetAroundCamera(float distance, float pitch, float roll, float lookAtZ = 0.0f);
|
||
void SetPositionCamera(float fx, float fy, float fz, float fDistance, float fPitch, float fRotation);
|
||
void MoveCamera(float fdeltax, float fdeltay, float fdeltaz);
|
||
|
||
void GetTargetPosition(float * px, float * py, float * pz);
|
||
void GetCameraPosition(float * px, float * py, float * pz);
|
||
void SetOrtho2D(float hres, float vres, float zres);
|
||
void SetOrtho3D(float hres, float vres, float zmin, float zmax);
|
||
void SetPerspective(float fov, float aspect, float nearz, float farz);
|
||
float GetFOV();
|
||
void GetClipPlane(float * fNearY, float * fFarY)
|
||
{
|
||
*fNearY = ms_fNearY;
|
||
*fFarY = ms_fFarY;
|
||
}
|
||
|
||
////////////////////////////////////////////////////////////////////////
|
||
void PushMatrix();
|
||
|
||
void MultMatrix( const D3DXMATRIX* pMat );
|
||
void MultMatrixLocal( const D3DXMATRIX* pMat );
|
||
|
||
void Translate(float x, float y, float z);
|
||
void Rotate(float degree, float x, float y, float z);
|
||
void RotateLocal(float degree, float x, float y, float z);
|
||
void RotateYawPitchRollLocal(float fYaw, float fPitch, float fRoll);
|
||
void Scale(float x, float y, float z);
|
||
void PopMatrix();
|
||
void LoadMatrix(const D3DXMATRIX & c_rSrcMatrix);
|
||
void GetMatrix(D3DXMATRIX * pRetMatrix) const;
|
||
const D3DXMATRIX * GetMatrixPointer() const;
|
||
|
||
// Special Routine
|
||
void GetSphereMatrix(D3DXMATRIX * pMatrix, float fValue = 0.1f);
|
||
|
||
////////////////////////////////////////////////////////////////////////
|
||
void InitScreenEffect();
|
||
void SetScreenEffectWaving(float fDuringTime, int iPower);
|
||
void SetScreenEffectFlashing(float fDuringTime, const D3DXCOLOR & c_rColor);
|
||
|
||
////////////////////////////////////////////////////////////////////////
|
||
DWORD GetColor(float r, float g, float b, float a = 1.0f);
|
||
|
||
DWORD GetFaceCount();
|
||
void ResetFaceCount();
|
||
HRESULT GetLastResult();
|
||
|
||
void UpdateProjMatrix();
|
||
void UpdateViewMatrix();
|
||
|
||
void SetViewport(DWORD dwX, DWORD dwY, DWORD dwWidth, DWORD dwHeight, float fMinZ, float fMaxZ);
|
||
static void GetBackBufferSize(UINT* puWidth, UINT* puHeight);
|
||
static bool IsTLVertexClipping();
|
||
static bool IsFastTNL();
|
||
static bool IsLowTextureMemory();
|
||
static bool IsHighTextureMemory();
|
||
|
||
static void SetDefaultIndexBuffer(UINT eDefIB);
|
||
static bool SetPDTStream(SPDTVertexRaw* pVertices, UINT uVtxCount);
|
||
static bool SetPDTStream(SPDTVertex* pVertices, UINT uVtxCount);
|
||
|
||
protected:
|
||
static D3DXMATRIX ms_matIdentity;
|
||
|
||
static D3DXMATRIX ms_matView;
|
||
static D3DXMATRIX ms_matProj;
|
||
static D3DXMATRIX ms_matInverseView;
|
||
static D3DXMATRIX ms_matInverseViewYAxis;
|
||
|
||
static D3DXMATRIX ms_matWorld;
|
||
static D3DXMATRIX ms_matWorldView;
|
||
|
||
protected:
|
||
//void UpdatePrePipeLineMatrix();
|
||
void UpdatePipeLineMatrix();
|
||
|
||
protected:
|
||
// <20><><EFBFBD><EFBFBD> D3DX Mesh <20><> (<28>÷<EFBFBD><C3B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ǥ<><C7A5>Ȱ <20><> <20><><EFBFBD><EFBFBD>)
|
||
static LPD3DXMESH ms_lpSphereMesh;
|
||
static LPD3DXMESH ms_lpCylinderMesh;
|
||
|
||
protected:
|
||
static HRESULT ms_hLastResult;
|
||
|
||
static int ms_iWidth;
|
||
static int ms_iHeight;
|
||
|
||
static UINT ms_iD3DAdapterInfo;
|
||
static UINT ms_iD3DDevInfo;
|
||
static UINT ms_iD3DModeInfo;
|
||
static D3D_CDisplayModeAutoDetector ms_kD3DDetector;
|
||
|
||
static HWND ms_hWnd;
|
||
static HDC ms_hDC;
|
||
static LPDIRECT3D8 ms_lpd3d;
|
||
static LPDIRECT3DDEVICE8 ms_lpd3dDevice;
|
||
static ID3DXMatrixStack* ms_lpd3dMatStack;
|
||
static D3DVIEWPORT8 ms_Viewport;
|
||
|
||
static DWORD ms_faceCount;
|
||
static D3DCAPS8 ms_d3dCaps;
|
||
static D3DPRESENT_PARAMETERS ms_d3dPresentParameter;
|
||
|
||
static DWORD ms_dwD3DBehavior;
|
||
static DWORD ms_ptVS;
|
||
static DWORD ms_pntVS;
|
||
static DWORD ms_pnt2VS;
|
||
|
||
static D3DXMATRIX ms_matScreen0;
|
||
static D3DXMATRIX ms_matScreen1;
|
||
static D3DXMATRIX ms_matScreen2;
|
||
//static D3DXMATRIX ms_matPrePipeLine;
|
||
|
||
static D3DXVECTOR3 ms_vtPickRayOrig;
|
||
static D3DXVECTOR3 ms_vtPickRayDir;
|
||
|
||
static float ms_fFieldOfView;
|
||
static float ms_fAspect;
|
||
static float ms_fNearY;
|
||
static float ms_fFarY;
|
||
|
||
// 2004.11.18.myevan.DynamicVertexBuffer<65><72> <20><>ü
|
||
/*
|
||
static std::vector<TIndex> ms_lineIdxVector;
|
||
static std::vector<TIndex> ms_lineTriIdxVector;
|
||
static std::vector<TIndex> ms_lineRectIdxVector;
|
||
static std::vector<TIndex> ms_lineCubeIdxVector;
|
||
|
||
static std::vector<TIndex> ms_fillTriIdxVector;
|
||
static std::vector<TIndex> ms_fillRectIdxVector;
|
||
static std::vector<TIndex> ms_fillCubeIdxVector;
|
||
*/
|
||
|
||
// Screen Effect - Waving, Flashing and so on..
|
||
static DWORD ms_dwWavingEndTime;
|
||
static int ms_iWavingPower;
|
||
static DWORD ms_dwFlashingEndTime;
|
||
static D3DXCOLOR ms_FlashingColor;
|
||
|
||
// Terrain picking<6E><67> Ray... CCamera <20>̿<EFBFBD><CCBF>ϴ<EFBFBD> <20><><EFBFBD><EFBFBD>.. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Ray<61><79> <20><><EFBFBD><EFBFBD> <20>ʿ<EFBFBD>...
|
||
static CRay ms_Ray;
|
||
|
||
//
|
||
static bool ms_bSupportDXT;
|
||
static bool ms_isLowTextureMemory;
|
||
static bool ms_isHighTextureMemory;
|
||
|
||
enum
|
||
{
|
||
PDT_VERTEX_NUM = 16,
|
||
PDT_VERTEXBUFFER_NUM = 100,
|
||
};
|
||
|
||
|
||
static LPDIRECT3DVERTEXBUFFER8 ms_alpd3dPDTVB[PDT_VERTEXBUFFER_NUM];
|
||
static LPDIRECT3DINDEXBUFFER8 ms_alpd3dDefIB[DEFAULT_IB_NUM];
|
||
};
|