class CRenderInterface
{
public:
CRenderInterface():m_nScreenWidth(0),m_nScreenHeight(0),
m_fNear(0),m_fFar(0){}
virtual ~CRenderInterface(){}
virtual bool Initialize(int nWidth, int nHeight, WinHWND hMainHandle,
bool bFullScreen, UGP_MS_TYPE ms) = 0;
virtual void OneTimeInit() = 0;
virtual void Shutdown() = 0;
virtual void SetClearColor(float fR, float fG, float fB) = 0;
virtual void StartRender(bool bColor, bool bDepth,
bool bStencil) = 0;
virtual void ClearBuffers(bool bColor, bool bDepth,
bool bStencil) = 0;
virtual void EndRendering() = 0;
virtual void CalculateProjMatrix(float fov, float n,
float f) = 0;
virtual void CalculateOrthoMatrix(float n, float f) = 0;
virtual int CreateStaticBuffer(VertexType, PrimType,
int totalVerts, int totalIndices,
int stride, void **data, unsigned int *indices,
int *staticId) = 0;
virtual int Render(int staticId) = 0;//2014.06.21 end Init D3D
virtual void SetMaterial(stMaterial *mat) = 0;
virtual void SetLight(stLight *light, int index) = 0;
virtual void DisableLight(int index) = 0;//2014.06.22 end light and materal
virtual void SetDepthTesting(RenderState state) = 0;
virtual void SetTransparency(RenderState state,
TransState src, TransState dst) = 0;
virtual int AddTexture2D(char *file, int *texId) = 0;
virtual void SetTextureFilter(int index, int filter,
int val) = 0;
virtual void SetMultiTexture() = 0;
virtual void ApplyTexture(int index, int texId) = 0;
virtual void SaveScreenShot(char *file) = 0;
virtual void EnablePointSprites(float size, float min,
float a, float b, float c) = 0;
virtual void DisablePointSprites() = 0;//2014.06.23 end Texture
virtual bool CreateText(char *font, int weight, bool italic,
int size, int &id) = 0;
virtual void DisplayText(int id, long x, long y,
int r, int g, int b,
char *text, ...) = 0;
virtual void DisplayText(int id, long x, long y,
unsigned long color,
char *text, ...) = 0;
// If porting to OpenGL would probably stay the same.
virtual bool CreateGUI(int &id) = 0;
virtual bool AddGUIBackdrop(int guiId,
char *fileName) = 0;
virtual bool AddGUIStaticText(int guiId, int id,
char *text, int x, int y, unsigned long color,
int fontID) = 0;
virtual bool AddGUIButton(int guiId, int id, int x,
int y, char *up, char *over, char *down) = 0;
virtual void ProcessGUI(int guiID, bool LMBDown,
int mouseX, int mouseY,
void(*funcPtr)(int id, int state)) = 0;//2014.06.24 end GUI
virtual void ReleaseAllGUIs() = 0;
virtual void EnableFog(float start, float end,
UGP_FOG_TYPE type, unsigned long color,
bool rangeFog) = 0;
virtual void DisableFog() = 0;
virtual void SetDetailMapping() = 0;//2014.06.24 end Special effects
virtual int LoadXModel(char *file, int *xModelId) = 0;
virtual int LoadXModel(char *file, int xModelId) = 0;
virtual void ReleaseAllStaticBuffers() = 0;
virtual void ReleaseAllXModels() = 0;
virtual int ReleaseStaticBuffer(int staticID) = 0;
virtual int ReleaseXModel(int xModelId) = 0;
virtual int RenderStaticBuffer(int staticId) = 0;
virtual int RenderXModel(int xModelId) = 0;
virtual void GetXModelBoundingSphere(int xModelId,
CVector3 *origin, float *radius) = 0;
virtual void UpdateXAnimation(int xModelId,
float time, CMatrix4x4 *mat) = 0;//2014.06.24 end X
virtual void ApplyView(CVector3 pos, CVector3 view, CVector3 up) = 0;
virtual void SetWorldMatrix(CMatrix4x4 *mat) = 0;
virtual void CameraToViewMatrix(CCamera *cam, CMatrix4x4 *mat) = 0;
virtual void GetProjectionMatrix(CMatrix4x4 *mat) = 0;//2014.06.24 end Camera
protected:
int m_nScreenWidth;
int m_nScreenHeight;
bool m_bFullScreen;
int m_nTotalFonts;
//Loading界面
CGUISystem *m_pGUIList;
int m_nTotalGUIs;
WinHWND m_hMainHandle;
float m_fNear;
float m_fFar;
};
上述源码为引擎接口(即基类),其实现的功能有:
1、初始化Direct3D。
2、Direct3D光照与材质。
3、纹理映射。
4、图形界面(UI)。
5、特效(粒子系统)。
6、Direct3D摄像机。
7、模型加载。
由于时间原因,笔者不再更新这块内容,书上讲的还是很详细的,有什么问题可以交流!