前些日子写了一个基于DrawDib视频函数库的Render,虽然显示图片速度非常快,但是还是难以满足一些交互式的实时显示.而且在放大缩小的时候,无法设置反锯齿功能(antialias). 本来不想用Directx的,看来现在还是逃不过. 我很讨厌用接口经常变动的东西,更讨厌需要安装支持动态链接库的东东, directx就是这样的东西,direct1到现在的directx9,每一次新接口都会变动,当然老的接口还是可以用的,但是出来相应的SDK文档却没有老接口的调用方法。没办法,down了个Directx9硬着头皮学学。
研究了一下午再加一晚上的SDK文档, 脑子里差不多有Render的框架了,大致如下:
class MMD3DRender
{
protected:
IDirect3D9* m_pD3D;
IDirect3DDevice9* m_pDev;
IDirect3DSurface9* m_pSuf;
……
//作一些Direct3D9的初始化工作
bool Init( HWND);
// 把Buffer里面的东西送到Surface上去(m_pSuf)
void Draw( BYTE* pBuffer,int iStep, LPRECT lpRc);
// WM_PAINT 消息处理
void Paint();
// 释放资源,退出的善后工作
void Destroy();
};
按道理调用这个Render很简单,只要在某个Window对象的WM_CREATE消息响应函数里面调用
Init( pWnd->GetSafeHwnd())
然后其WM_PAINT函数里加
ValidateRect(NULL);
render.Paint();
就OK了。