之前买了本OpenGL的书,没看,现在却准备学习DirectX了。既然想学,就得选一个版本开始,我选择了DriectX11,也是听从前辈们的推荐。入门的书就首推这本——《Introduction_to_3D_Game_Programming_with_Directx_11》,然而,这本貌似没有中文版,至少我没找到。考虑的平时工作忙碌,英文读起来远远比中文慢,我内心有些纠结了。最后,我只能决定,硬着头皮啃吧。
本书作者封装了一些常用代码,使用这些代码会让开发效率更高,比如初始化就变得异常简单了。这看起来很像cocos2d-x的风格,创建,初始化分成两步。下面就是代码:
#include "d3dApp.h"
class InitDirect3DApp : public D3DApp
{
public:
InitDirect3DApp(HINSTANCE hInstance);
~InitDirect3DApp();
bool Init();
void OnResize();
void UpdateScene(float dt);
void DrawScene();
};
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE prevInstance,
PSTR cmdLine, int showCmd)
{
InitDirect3DApp theApp(hInstance);
if (!theApp.Init()) {
return 0;
}
return theApp.Run();
}
InitDirect3DApp::InitDirect3DApp(HINSTANCE hInstance) :D3DApp(hInstance)
{
}
InitDirect3DApp::~InitDirect3DApp()
{
}
bool InitDirect3DApp::Init()
{
if (!D3DApp::Init()) {
return false;
}
return true;
}
void InitDirect3DApp::OnResize()
{
D3DApp::OnResize();
}
void InitDirect3DApp::UpdateScene(float dt)
{
}
void InitDirect3DApp::DrawScene()
{
assert(md3dImmediateContext);
assert(mSwapChain);
md3dImmediateContext->ClearRenderTargetView(mRenderTargetView,
reinterpret_cast<const float*>(&Colors::Blue));
md3dImmediateContext->ClearDepthStencilView(mDepthStencilView,
D3D11_CLEAR_DEPTH | D3D11_CLEAR_STENCIL, 1.0f, 0);
HR(mSwapChain->Present(0, 0));
}