读书人

D3D游戏编程系列(1):DXLib的介绍

发布时间: 2013-10-10 14:14:51 作者: rapoo

D3D游戏编程系列(一):DXLib的介绍

// DXUI.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include "DXLib.h"#include <io.h>#include <fcntl.h>#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )class CDXMyButton:public CDXButton{public:void OnMouseOver(int x,int y);void OnMouseLeave(int x,int y);void OnMouseMove(int x,int y);};void CDXMyButton::OnMouseOver(int x,int y){SetBKColor(D3DCOLOR_XRGB(110,110,10));}void CDXMyButton::OnMouseLeave(int x,int y){SetBKColor(D3DCOLOR_XRGB(255,255,255));}void CDXMyButton::OnMouseMove( int x,int y ){WCHAR wzBuf[255]={0};wsprintf(wzBuf,L"%d,%d",x,y);SetText(wzBuf);}class MyWin:public CDXWindow{public:MyWin(){}protected:void DXDraw(bool bInputEnabled);bool ExtInit();ID3DXSprite *m_Spr;CDXMyButton m_Button;void DXBeforeDraw(bool bInputEnabled);ID3DXFont *m_Font;void DXOnLostDevice();void DXOnResetDevice();CDXListBox m_Listbox;CDXEdit m_Edit;CDXXFile m_XFile;};void MyWin::DXDraw(bool bInputEnabled){//m_XFile.Render();RECT r={10,20,120,100};DXDrawQuad(&r,D3DCOLOR_ARGB(255,1,11,0),true);DXDrawQuad(&r,D3DCOLOR_ARGB(255,111,111,0),true);}bool MyWin::ExtInit(){SetBKColor(D3DCOLOR_XRGB(10,111,10));m_Edit.Create(this,300,100,100,20);m_Button.Create(this,200,200,300,200);m_Button.SetFont(30,_T("微软雅黑"));m_Button.SetText(_T("df5345"));m_Button.SetForeColor(D3DCOLOR_XRGB(66,66,66));//m_Button.SetBkImg(_T("c:\\1.bmp"));m_Button.SetBKColor(D3DCOLOR_XRGB(255,255,255));m_Button.SetVertexAlpha(true);m_Spr=DXCreateSprite(); //m_pd3dDevice->CreateTexture(500,500,1,D3DUSAGE_RENDERTARGET,D3DFMT_X8R8G8B8, D3DPOOL_DEFAULT,&m_Tex,0);//m_pd3dDevice->CreateRenderTarget(500,500,D3DFMT_X8R8G8B8,D3DMULTISAMPLE_NONE,1,0,&m_Sur,0);//m_pd3dDevice->GetBackBuffer(0,0,D3DBACKBUFFER_TYPE_MONO,&m_back);m_Font=DXCreateFont();m_Listbox.Create(this,400,400,100,100,30);m_Listbox.AddItem(L"123");m_Listbox.AddItem(L"ewrw");m_Listbox.AddItem(L"12ds3");m_Listbox.AddItem(L"r2");m_Listbox.AddItem(L"dsgs");m_Listbox.AddItem(L"fgf");m_Listbox.AddItem(L"56");m_Listbox.AddItem(L"123");m_Listbox.AddItem(L"ewrw");m_Listbox.AddItem(L"12ds3");m_Listbox.AddItem(L"r2");m_Listbox.AddItem(L"dsgs");m_Listbox.AddItem(L"fgf");m_Listbox.AddItem(L"56");// AllocConsole();// // // 取得 STDOUT 的文件系统// HANDLE stdOutputHandle = GetStdHandle( STD_OUTPUT_HANDLE );// // // Redirect STDOUT to the new console by associating STDOUT's file // // descriptor with an existing operating-system file handle.// int hConsoleHandle = _open_osfhandle( (intptr_t)stdOutputHandle, _O_TEXT );// FILE *pFile = _fdopen( hConsoleHandle, "w" );// *stdout = *pFile;// setvbuf( stdout, NULL, _IONBF, 0 );// // // 这个调用确保 iostream 和 C run-time library 的操作在源代码中有序。 // ios::sync_with_stdio();// cout<<1<<endl;//m_XFile.LoadFile(L"C:\\Users\\sx\\Desktop\\12.x",m_pd3dDevice);return true;}void MyWin::DXBeforeDraw( bool bInputEnabled ){// m_Tex->GetSurfaceLevel(0,&m_Sur);// IDirect3DSurface9 *curSurface;// m_pd3dDevice->GetRenderTarget(0,&curSurface);// m_pd3dDevice->SetRenderTarget(0,m_Sur);// //m_pd3dDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, D3DCOLOR_XRGB(0,0,0), 1.0f, 0);// m_pd3dDevice->BeginScene();// RECT r={10,10,400,400};// if(FAILED(m_Font->DrawTextW(0,L"123456789",9,&r,DT_TOP|DT_LEFT,D3DCOLOR_XRGB(155,15,155))))// {// return;// }// m_pd3dDevice->EndScene();// m_pd3dDevice->SetRenderTarget(0,curSurface);// curSurface->Release();// m_Sur->Release();}void MyWin::DXOnLostDevice(){m_Spr->OnLostDevice();m_Font->OnLostDevice();}void MyWin::DXOnResetDevice(){m_Spr->OnResetDevice();m_Font->OnResetDevice();}int main(int argc, _TCHAR* argv[]){CoInitialize(0);MyWin win;win.Create(_T("sx"),0,20,30,800,600);win.SetDrawDelay(20);win.SetFps(true);win.DoModal();return 0;}
在上面的demo里面,我们使用了CDXListBox,CDXEdit这两个DXLib内部的控件,以及CDXMyButton这个控件,该控件也是继承DXLib内部的CDXButton控件。有兴趣的朋友可以试试这些控件,有什么建议也可以跟我提出来,我会不断改善的。

还有一点SetDrawDelay函数是设置DX程序的fps值,这里设置的是1000/20,也就是50。SetFps函数是设置fps的值是否显示在程序的左上角。下面我列出所有的DXLib的类,让大家一目了然:

CDXBaseMesh:网格的基类,是CDXEntity里的Mesh存储对象

CDXButton:Button控件

CDXCamera:第一人称Camera视角

CDXControl:控件的基类

CDXEdit:Edit控件

CDXEntity:实体类,主要作用于八叉树,用于存放每个Mesh对象

CDXHelper:Help帮助函数,可以做一些快速检测等操作

CDXLand:基于灰度图的地形渲染类

CDXListBox:Listbox控件

CDXLua:Lua脚本操作类

CDXMesh:网格操作类

CDXMutiplyStatic: 多行Static控件

CDXOctNode:八叉树渲染

CDXParticle:粒子渲染

CDXShader: Shader渲染

CDXSkinMesh: 骨骼动画操作类

CDXSky: 天空盒

CDXStatic: Static控件

CDXThirdCamera: 第三人称Camera视角

CDXWindow: DX窗体类,DX的创建,渲染,释放等

CDXXFile: 静态X文件渲染类


文章有不足之处,还望大家多多指正。




读书人网 >编程

热点推荐