DirectX Graphics 入门
来源:互联网 发布:海岛奇兵烟雾升级数据 编辑:程序博客网 时间:2024/05/18 18:42
Direct3D组件
使用D3D组件要包含D3D9.h头文件
主要的D3D组件有
IDrect3D9 该对象可以收集图形的硬件信息及其接口
IDrect3DDevice9 该对象可以渲染图形,处理图形图像资源,创建和设置渲染状态等
IDrect3DVertexBuffer9 包含一个用于渲染多边形顶点数组的信息
IDirect3DTexture9 存储所有的面着色图像
初始化系统
1. 获取一个Direct3D接口
2. 选择一个显示模式
3. 设置显示模式
4. 创建设备接口并初始化显示接口
获取一个Direct3D接口
LPDIRECT3D9 g_pD3D = NULL; //Direct3D对象
//创建Direct3D对象, 该对象用于创建Direct3D设备对象
if( NULL == ( g_pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
return E_FAIL;
选择显示模式
显示模式通过分辨率,色深,及其默认刷新率来区分显示模式,显示模式的信息储存在D3DDISPLAYMODE结构体中
typedef struct_D3DDISPLAYMODE{
UNIT Width;
UNIT Height;
UNIT RefreshRate;
D3DFORMAT Format; //颜色格式
} D3DDISPLAYMODE
可以如下设置
D3DDISPLAYMODE d3ddm;
d3ddm.Width = 640;
d3ddm.Height = 480;
d3ddm.RefreshRate = 0; //默认刷新率
d3ddm.Format = D3DFMT_R5G6B5;
D3DFMT_R8G8D8 //24位,8红8绿8蓝
D3DFMT_A8R8G8B8
D3DFMT_X8R8G8B8
D3DFMT_R5G5B5
D3DFMT_X1R5G5B5 //1位,未使用
D3DFMT_A1R5G5B5 //1位,Alpha
//g_pD3D 与初始化的Direct3D对象
//d3df 与初始化的D3DFORMAT结构体
//检测是否存在该显示模式
if(FAILED(g_pD3D->CheckDeviceType(D3DADAPTER_DEFAULT,D3DEVTYPE_HAL,&d3df,&d3df,FALSE)))
//出现错误不支持该模式
//返回一个有效的D3DDISPLAYMODE结构体存储在d3ddm中
if(FAILED(g_pD3D->GetDisplayMode(D3DADAPTER_DEFAULT, &d3ddm)))
return FALSE;
设置显示模式 确定如何将图形显示给玩家。是在一个窗口中显示,还是全屏显示或者在后备缓冲区中操作?使用何种刷新率?所有信息都存储在D3DPRESENT_PARAMETERS结构体中 typedef struct _D3DPRESENT_PARAMETERS_ { UINT BackBufferWidth, BackBufferHeight; D3DFORMAT BackBufferFormat; UINT BackBufferCount; D3DMULTISAMPLE_TYPE MultiSampleType; DWORD MultiSampleQuality; D3DSWAPEFFECT SwapEffect; HWND hDeviceWindow; BOOL Windowed; BOOL EnableAutoDepthStencil; D3DFORMAT AutoDepthStencilFormat; DWORD Flags; UINT FullScreen_RefreshRateInHz; UINT PresentationInterval; } D3DPRESENT_PARAMETERS; 不必全部理会其中的字段,根据是窗口还是全部显示,下面是会用到的两种可能的设置 //d3ddm 与初始化D3DDISPLAYMODE结构体 D3DDISPLAYMODE_PARAMETERS d3dpp; //清空结构体 ZeroMemory(&d3dpp,sizeof(D3DDISPLAYMODE_PARAMETERS)); //对于窗口模式 d3dpp.Windowed = TRUE; d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; d3dpp.BackBufferFormat = d3ddm.Format //使用相同的演示模式 //对于全屏使用 d3dpp.Windowed = FALSE; d3dpp.SwapEffect = D3DSWAPEFFECT_FLIP; d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT; d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_DEFAULT; d3dpp.BackBufferFormat = d3ddm.Format; //对于窗口和全屏指定宽度与高度 d3dpp.BackBufferWidth = Width; d3dpp.BackBufferHeight = Hegith; 创建设备接口并初始化显示接口 HRESULT CreateDevice( D3DDEVTYPE DeviceType, //D3DDEVTYPE_HAL HWND hFocusWindow, //窗口句柄用于渲染 DWORD BehaviorFlags, //D3DCREATE_SOFTWARE_VERTEXPROCESSING D3DPRESENT_PARAMETERS *pPresentationParameters, //d3dpp IDirect3DDevice9** ppReturnedDeviceInterface //设备对象 ); 调用方法如下 IDirect3DDevice8 *g_pD3DDevice = NULL; if(FAILED(g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, g_hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &g_pD3DDevice))) 注HAL(hardware abstraction layer)硬件抽象层 REF(reference device)参考设备 HAL是真实的显卡 REF通过软件方式实现显卡不支持的功能 丢失设备 如何知道设备丢失!?通过检测设备的返回值,如果设备对象返回D3DERR_DEVICELOST值,就知道设备已经丢失。重新获得设备控制权是一步到位的。 HRESULT IDirect3DDevice9::Reset( D3DPRESENT_PARAMETERS *pPresentationParameters); g_pD3DDevice->Reset(&d3dpp);
UINT Adapter, //D3DADAPTER_DEFAULT
- DirectX Graphics 入门
- Debugging DirectX Graphics
- DirectX 8 Graphics常见错误
- DirectX FAQ 翻译(Graphics 部分)
- DirectX 3D Graphics Programming Bible
- DirectX FAQ 翻译(Graphics 部分)(转)
- DirectX Graphics 8.1中的Mesh优化
- DXGI——DirectX Graphics Infrastructure
- graphics入门,显示文字
- Core Graphics快速入门
- DirectX 入门例程
- DirectX编程入门
- DirectX游戏开发入门
- DirectX入门小结
- DirectX 入门(一)
- 新手入门之DirectX入门
- DirectX 的入门总结
- About the W32/Codbot-O —— DirectX Graphics (dxdmain)
- 你好
- 把电子书《高质量C++编程指南》看完了
- DynaValidatorForm验证
- 深入理解Direct3D9
- D3DPRESENT_PARAMETERS结构体
- DirectX Graphics 入门
- 一个简单.X文件的定义
- 改变D3D中的渲染状态
- 3G上网费玄机
- Effective Java Item5-在可以重用对象的时候避免创建对象
- 在Mysql中用 LONGTEXT 类型存储大文件(二进制也可以) (修改+调试+整理)
- How do I get into graphics?
- Java 连接Oracle
- java swing 仿tencent 系统消息(自动上升)