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];
|
|||
|
};
|