你如果要在3D中表现2D的话,就要用我说的那种办法
如果单纯的2D的话
可以看D7的DDraw方面的资料,在D9中也是支持的
如果非要用D3D的话
D9里有个IDirect3DSurface9,你可以查它的帮助看看用法
给个小例子,很简单的换页,跟DDraw差不多
#include <d3d9.h>
#include <d3dx9.h>
LPDIRECT3D9 pD3D=NULL; //D3D9对象接口
LPDIRECT3DDEVICE9 pD3DDevice=NULL; //D3D9设备对象接口
IDirect3DSurface9* srcSurface=NULL; //离屏页面
IDirect3DSurface9* backbuffer = NULL;//后台页面
/*********************************************************************
* InitDirect3D
*********************************************************************/
bool InitDirect3D(HWND hWnd,int w,int h,bool fullScreen)
{
//创建D3D对象
if( NULL == ( pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
{
return false;
}
//填充D3DPRESENT_PARAMETERS结构
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof( d3dpp ) );
d3dpp.Windowed = !fullScreen;//窗口模式
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;//换页方式
d3dpp.BackBufferCount = 1;//后台页面数
d3dpp.BackBufferHeight = h;//后台页面高
d3dpp.BackBufferWidth = w;//后台页面宽
d3dpp.hDeviceWindow = hWnd;//窗句柄
if (!fullScreen)//根据窗口模式设置后台页面格式
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
else
d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;
//创建D3D设备对象
if( FAILED( pD3D->CreateDevice( D3DADAPTER_DEFAULT,//县卡类型,默认为主显卡
D3DDEVTYPE_REF,//设备类型 HAL硬件加速 REF微软推荐 SW软加速
hWnd,//窗口句柄
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp,//D3DPRESENT_PARAMETERS结构
&pD3DDevice)))//设备指针
{
return false;
}
//创建离屏页面
if (FAILED(pD3DDevice->CreateOffscreenPlainSurface(
w, // 宽
h, // 高
d3dpp.BackBufferFormat,//D3DFMT_X8R8G8B8, // 页面格式
D3DPOOL_DEFAULT, //页面存放位置 SYSTEMMEM内存 DEFAULT显存或内存
&srcSurface, //页面指针
NULL))) //保留
{
return false;
}
//载入图片到离屏页面
if ( FAILED(D3DXLoadSurfaceFromFile(srcSurface,//目的页面
NULL,//目的页面调色板
NULL,//目的页面区域
"D:/程序/DX/D3D9/pic/zl.bmp",//源文件路径
NULL,//源文件区域
D3DX_DEFAULT,//文件过滤类型
0,//ColorKey
NULL )))//图片信息
{
return false;
}
return true;
}
/*********************************************************************
* Render
*********************************************************************/
void RenderD3D ()
{
if( NULL == pD3DDevice )
return;
//清屏
pD3DDevice->Clear( 0,//矩形数目
NULL, //矩形范围 第一个参数不为0时有效
D3DCLEAR_TARGET,//清除标志
D3DCOLOR_XRGB( 0,0,0),//颜色
1.0f, //Zbuffer
0 );//stencil buffer.
//得到后台页面
pD3DDevice->GetBackBuffer( 0,//换页描绘
0,//Buffer链索引
D3DBACKBUFFER_TYPE_MONO,//唯一有效的值
&backbuffer);//后台页面指针
//页面拷贝
pD3DDevice->StretchRect(srcSurface,//源页面
NULL,//源页面区域
backbuffer,//目的页面
NULL,//目的页面区域
D3DTEXF_NONE );//过滤类型
//翻页
pD3DDevice->Present( NULL, //源区域 Null为整个后台页面
NULL, //目的区域
NULL,
NULL );//Buffer Null为全部Buffer
}
/*********************************************************************
* CleanUpD3D
*********************************************************************/
void CleanUpD3D ()
{
//释放对象
if (srcSurface!=NULL)
srcSurface->Release;
if (backbuffer!=NULL)
backbuffer->Release;
if( pD3DDevice != NULL )
pD3DDevice->Release();
if( pD3D != NULL )
pD3D->Release();
}
如果单纯的2D的话
可以看D7的DDraw方面的资料,在D9中也是支持的
如果非要用D3D的话
D9里有个IDirect3DSurface9,你可以查它的帮助看看用法
给个小例子,很简单的换页,跟DDraw差不多
#include <d3d9.h>
#include <d3dx9.h>
LPDIRECT3D9 pD3D=NULL; //D3D9对象接口
LPDIRECT3DDEVICE9 pD3DDevice=NULL; //D3D9设备对象接口
IDirect3DSurface9* srcSurface=NULL; //离屏页面
IDirect3DSurface9* backbuffer = NULL;//后台页面
/*********************************************************************
* InitDirect3D
*********************************************************************/
bool InitDirect3D(HWND hWnd,int w,int h,bool fullScreen)
{
//创建D3D对象
if( NULL == ( pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
{
return false;
}
//填充D3DPRESENT_PARAMETERS结构
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof( d3dpp ) );
d3dpp.Windowed = !fullScreen;//窗口模式
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;//换页方式
d3dpp.BackBufferCount = 1;//后台页面数
d3dpp.BackBufferHeight = h;//后台页面高
d3dpp.BackBufferWidth = w;//后台页面宽
d3dpp.hDeviceWindow = hWnd;//窗句柄
if (!fullScreen)//根据窗口模式设置后台页面格式
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
else
d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;
//创建D3D设备对象
if( FAILED( pD3D->CreateDevice( D3DADAPTER_DEFAULT,//县卡类型,默认为主显卡
D3DDEVTYPE_REF,//设备类型 HAL硬件加速 REF微软推荐 SW软加速
hWnd,//窗口句柄
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp,//D3DPRESENT_PARAMETERS结构
&pD3DDevice)))//设备指针
{
return false;
}
//创建离屏页面
if (FAILED(pD3DDevice->CreateOffscreenPlainSurface(
w, // 宽
h, // 高
d3dpp.BackBufferFormat,//D3DFMT_X8R8G8B8, // 页面格式
D3DPOOL_DEFAULT, //页面存放位置 SYSTEMMEM内存 DEFAULT显存或内存
&srcSurface, //页面指针
NULL))) //保留
{
return false;
}
//载入图片到离屏页面
if ( FAILED(D3DXLoadSurfaceFromFile(srcSurface,//目的页面
NULL,//目的页面调色板
NULL,//目的页面区域
"D:/程序/DX/D3D9/pic/zl.bmp",//源文件路径
NULL,//源文件区域
D3DX_DEFAULT,//文件过滤类型
0,//ColorKey
NULL )))//图片信息
{
return false;
}
return true;
}
/*********************************************************************
* Render
*********************************************************************/
void RenderD3D ()
{
if( NULL == pD3DDevice )
return;
//清屏
pD3DDevice->Clear( 0,//矩形数目
NULL, //矩形范围 第一个参数不为0时有效
D3DCLEAR_TARGET,//清除标志
D3DCOLOR_XRGB( 0,0,0),//颜色
1.0f, //Zbuffer
0 );//stencil buffer.
//得到后台页面
pD3DDevice->GetBackBuffer( 0,//换页描绘
0,//Buffer链索引
D3DBACKBUFFER_TYPE_MONO,//唯一有效的值
&backbuffer);//后台页面指针
//页面拷贝
pD3DDevice->StretchRect(srcSurface,//源页面
NULL,//源页面区域
backbuffer,//目的页面
NULL,//目的页面区域
D3DTEXF_NONE );//过滤类型
//翻页
pD3DDevice->Present( NULL, //源区域 Null为整个后台页面
NULL, //目的区域
NULL,
NULL );//Buffer Null为全部Buffer
}
/*********************************************************************
* CleanUpD3D
*********************************************************************/
void CleanUpD3D ()
{
//释放对象
if (srcSurface!=NULL)
srcSurface->Release;
if (backbuffer!=NULL)
backbuffer->Release;
if( pD3DDevice != NULL )
pD3DDevice->Release();
if( pD3D != NULL )
pD3D->Release();
}
嘟嘟互动视觉网站是多点触控、虚拟现实、增强现实、大屏幕投影显示等技术的交流学习网站网站