我的InitD3D()
来源:互联网 发布:手机淘宝编辑宝贝图片 编辑:程序博客网 时间:2024/05/22 05:34
//----------------------------------------------------------------------------------
// 功能: 创建窗口、初始化D3D对象和设备.
// 返回: HRESULT
//----------------------------------------------------------------------------------
HRESULT CItemD3D_Manager::InitD3D()
{
HRESULT hr;
// 创建窗口
CRect wndRect(0,0,1024,768);
m_pD3DWnd = new CItemD3D_Wnd(this);
if ( NULL == ( m_pD3DWnd->CreateEx(
0, AfxRegisterWndClass(0,NULL,NULL,NULL),
"D3DITEM", WS_CHILD | WS_VISIBLE & ~WS_BORDER, wndRect,
CPage::s_pRightView, 0, NULL) ) )
{
AfxMessageBox("ERROR! 窗口创建失败!");
return false;
}
m_pD3DWnd->ShowWindow(SW_HIDE);
// 创建D3D对象
if (NULL == (m_pD3D = Direct3DCreate9(D3D_SDK_VERSION)))
{
AfxMessageBox("ERROR! D3D对象创建失败!");
return false;
}
// 创建D3D设备
D3DPRESENT_PARAMETERS d3dpp;
D3DDISPLAYMODE displayMode;
hr = m_pD3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &displayMode );
::ZeroMemory(&d3dpp, sizeof(d3dpp));
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferCount = 1; // 仅需要一个备份缓冲区
d3dpp.EnableAutoDepthStencil = TRUE;
d3dpp.AutoDepthStencilFormat = D3DFMT_D16; // 生成16 bit的Z缓存
if (m_bFullScreen)
{
d3dpp.Windowed = FALSE;
// 功能: 创建窗口、初始化D3D对象和设备.
// 返回: HRESULT
//----------------------------------------------------------------------------------
HRESULT CItemD3D_Manager::InitD3D()
{
HRESULT hr;
// 创建窗口
CRect wndRect(0,0,1024,768);
m_pD3DWnd = new CItemD3D_Wnd(this);
if ( NULL == ( m_pD3DWnd->CreateEx(
0, AfxRegisterWndClass(0,NULL,NULL,NULL),
"D3DITEM", WS_CHILD | WS_VISIBLE & ~WS_BORDER, wndRect,
CPage::s_pRightView, 0, NULL) ) )
{
AfxMessageBox("ERROR! 窗口创建失败!");
return false;
}
m_pD3DWnd->ShowWindow(SW_HIDE);
// 创建D3D对象
if (NULL == (m_pD3D = Direct3DCreate9(D3D_SDK_VERSION)))
{
AfxMessageBox("ERROR! D3D对象创建失败!");
return false;
}
// 创建D3D设备
D3DPRESENT_PARAMETERS d3dpp;
D3DDISPLAYMODE displayMode;
hr = m_pD3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &displayMode );
::ZeroMemory(&d3dpp, sizeof(d3dpp));
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferCount = 1; // 仅需要一个备份缓冲区
d3dpp.EnableAutoDepthStencil = TRUE;
d3dpp.AutoDepthStencilFormat = D3DFMT_D16; // 生成16 bit的Z缓存
if (m_bFullScreen)
{
d3dpp.Windowed = FALSE;
d3dpp.BackBufferWidth = displayMode.Width;
d3dpp.BackBufferWidth = displayMode.Width;
d3dpp.BackBufferHeight = displayMode.Height;
d3dpp.BackBufferFormat = displayMode.Format;
}
else
{
d3dpp.Windowed = TRUE;
d3dpp.BackBufferFormat = displayMode.Format;
}
if ( FAILED( hr = m_pD3D->CreateDevice(
D3DADAPTER_DEFAULT, // 使用缺省的显卡
D3DDEVTYPE_HAL, // 指定设备类型为HAL
m_pD3DWnd->m_hWnd, // Direct3D窗口的句柄
D3DCREATE_SOFTWARE_VERTEXPROCESSING,// 软件顶点处理
&d3dpp,
&m_pDevice) ) )
{
AfxMessageBox("ERROR! D3D设备创建失败!");
return hr;
}
// 设置渲染状态 ------------------------->
// 启用Z缓存,允许消隐处理
m_pDevice->SetRenderState( D3DRS_ZENABLE, D3DZB_TRUE );
// 关闭“挑选”功能,允许渲染背面
m_pDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );
// 打开环境光照
m_pDevice->SetRenderState( D3DRS_AMBIENT, RGB(255,255,255) );
// 打开光照处理
m_pDevice->SetRenderState( D3DRS_LIGHTING, TRUE );
// 自动对法线矢量进行归一化处理
m_pDevice->SetRenderState( D3DRS_NORMALIZENORMALS, TRUE );
m_pDevice->SetRenderState( D3DRS_SPECULARENABLE, true );
m_pDevice->SetRenderState( D3DRS_SHADEMODE, D3DSHADE_GOURAUD );
// 启用材质阿尔法混合
m_pDevice->SetRenderState( D3DRS_DIFFUSEMATERIALSOURCE, D3DMCS_MATERIAL );
//m_pDevice->SetRenderState( D3DRS_SPECULARMATERIALSOURCE, D3DMCS_MATERIAL);
// <--------------------------设置渲染状态
return true;
}
d3dpp.BackBufferHeight = displayMode.Height;
d3dpp.BackBufferFormat = displayMode.Format;
}
else
{
d3dpp.Windowed = TRUE;
d3dpp.BackBufferFormat = displayMode.Format;
}
if ( FAILED( hr = m_pD3D->CreateDevice(
D3DADAPTER_DEFAULT, // 使用缺省的显卡
D3DDEVTYPE_HAL, // 指定设备类型为HAL
m_pD3DWnd->m_hWnd, // Direct3D窗口的句柄
D3DCREATE_SOFTWARE_VERTEXPROCESSING,// 软件顶点处理
&d3dpp,
&m_pDevice) ) )
{
AfxMessageBox("ERROR! D3D设备创建失败!");
return hr;
}
// 设置渲染状态 ------------------------->
// 启用Z缓存,允许消隐处理
m_pDevice->SetRenderState( D3DRS_ZENABLE, D3DZB_TRUE );
// 关闭“挑选”功能,允许渲染背面
m_pDevice->SetRenderState( D3DRS_CULLMODE, D3DCULL_NONE );
// 打开环境光照
m_pDevice->SetRenderState( D3DRS_AMBIENT, RGB(255,255,255) );
// 打开光照处理
m_pDevice->SetRenderState( D3DRS_LIGHTING, TRUE );
// 自动对法线矢量进行归一化处理
m_pDevice->SetRenderState( D3DRS_NORMALIZENORMALS, TRUE );
m_pDevice->SetRenderState( D3DRS_SPECULARENABLE, true );
m_pDevice->SetRenderState( D3DRS_SHADEMODE, D3DSHADE_GOURAUD );
// 启用材质阿尔法混合
m_pDevice->SetRenderState( D3DRS_DIFFUSEMATERIALSOURCE, D3DMCS_MATERIAL );
//m_pDevice->SetRenderState( D3DRS_SPECULARMATERIALSOURCE, D3DMCS_MATERIAL);
// <--------------------------设置渲染状态
return true;
}
if (m_bFullScreen)
...{
d3dpp.Windowed = FALSE;
d3dpp.BackBufferWidth = displayMode.Width;
d3dpp.BackBufferHeight = displayMode.Height;
d3dpp.BackBufferFormat = displayMode.Format;
}
else
...{
d3dpp.Windowed = TRUE;
d3dpp.BackBufferFormat = displayMode.Format;
}
...{
d3dpp.Windowed = FALSE;
d3dpp.BackBufferWidth = displayMode.Width;
d3dpp.BackBufferHeight = displayMode.Height;
d3dpp.BackBufferFormat = displayMode.Format;
}
else
...{
d3dpp.Windowed = TRUE;
d3dpp.BackBufferFormat = displayMode.Format;
}
- 我的InitD3D()
- DirectX的error LNK2019: 无法解析的外部符号 _Direct3DCreate9@4,该符号在函数 "long __cdecl InitD3D(struct HWND__ *)"
- error LNK2019: 无法解析的外部符号 _Direct3DCreate9@4,该符号在函数 "int __cdecl InitD3D(struct HWND__ *,unsigned lo
- 我写我的
- 我认识的我
- 我的``
- 我的
- 我的
- 我的
- 我的
- 我的
- 我的
- 我的
- 我的
- 我的
- 我的
- 我的
- 我的
- ERP系统验收时测试流程方法及内容[4]
- c++问题
- 配置jdk
- 栈的顺序存储
- 遍历文件夹
- 我的InitD3D()
- 一些匿名语言元素
- ASP编程入门进阶(十六):FSO组件之驱动器操作
- 栈的链式存储
- 读取web.config中连接字符串的方法
- ASP编程入门进阶(十七):FSO组件之文件夹操作
- .NET中数据层自动生成工具
- 谈谈黄金分割与摄影构图 [转]
- 数据窗口当前行是否为每页最后一行