这两天总结从创建一个窗口到纹理、灯光
第一: 创建窗口
首先声明一个窗口类结构体对象:
WNDCLASS wnd;
接着填充各参数。
下一步是:注册窗口
RegisterClass( &wnd);
创建窗口 : HWND hwnd = 0;
hwnd = CreateWindow();
显示窗口 ShowWindow();
刷新窗口 UpdateWindow();
这样一个窗口就可以显示了。
第二: 初始化D3D
IDirect3D9 *d3d9;
IDirect3DDevice9 *Device;
获得一个IDirect3D9接口
d3d9 = Direct3DCreate9( D3D_SDK_VERSION);
检测硬件顶点处理能力
D3DCAP9 caps;
d3d9->GetDeviceCaps();
int vp = 0;
if( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT)
vp = D3DCREATE_HARDWARE_VERTEXPROCESSING;
else
vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING;
接着填充D3DPRESEN_PARAMETERS结构
D3DPRESENT_PARAMETERS d3dpp;
填充完后 创建设备指针
HRESULT hr = 0;
hr = d3d9->CreateDevice( );
第三: 创建顶点
IDirect3DVertexBuffer9 *VB = 0;
IDirect3DIndexBuffer9 *IB = 0;
先创建一个顶点结构体Vertex,
接着创建一个顶点缓冲区 Device->CreateVertexBuffer();
Vertex *vertices;
VB->Lock();
将顶点读入顶点缓冲区
VB->Uncock();
索引顶点:
WORD index;
index->Lock();
将顶点读入索引缓冲区
index->Unlock();
第四: 放置摄像机
D3DXMATRIX V;
D3DXVECTOR3 position( 0.0f, 0.0f, -5.0f);
D3DXVECTOR3 target( 0.0f, 0.0f, 0.0f);
D3DXVECTOR3 up( 0.0f, 1.0f, 0.0f);
D3DXMatrixLookAtLH( &V, &position, &target, &up) //如果要向右旋转则为RH
投影://将2D图转化为3D图
D3DXMATRIX proj;
D3DXMatrixPerspectiveFovLH( &proj, D3DX_PI * 0.5f, width/height, 1.0f, 1000.0f);
Device->SetTransform( D3DTS_PROJECTION, &proj);
第五: 渲染
首先要清0
Device->Clear();
Device->BeginScene(); //开始渲染
设置资源流: Device->SetSreamSource( );
设置灵活顶点格式 :Device->SetFVF();
设置索引缓冲区: Device->SetIndices();//如果没用索引顶点,就不加
Device->DrawPrimitive() //这是不用索引顶点。
Device->DrawIndexPrimitive() //这是用索引顶点渲染
Device->EndScene(); //结束渲染