- A+
所属分类:Windows游戏开发 原创文章
哈哈哈,有色啦
及上次的Cube
我是用顶点数据,渲染出Cube线框
现在,加上颜色
首先,修改顶点结构体
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
struct Vertex { Vertex(float x, float y, float z, D3DCOLOR color) { _x = x; _y = y; _z = z; _color = color; } float _x, _y, _z; D3DCOLOR _color; static const DWORD FVF = D3DFVF_XYZ|D3DFVF_DIFFUSE; }; |
多了一个D3DCOLOR
顶点格式也加了个漫反射
注意:
D3DCOLOR _color;需要写在float _x,_y,_z下面
不然颜色就不管用了
漫反射:就是物体反馈颜色时,是向所有方向发射,与观察点无关
创建顶点和索引Buffer
对顶点和颜色赋值
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Vertex *v; VB->Lock(0, 0, (VOID**)&v, 0); v[0] = Vertex(-1.0f, -1.0f, -1.0f,D3DCOLOR_XRGB(255,0,0)); v[1] = Vertex(-1.0f, 1.0f, -1.0f, D3DCOLOR_XRGB(255, 255, 0)); v[2] = Vertex(1.0f, 1.0f, -1.0f, D3DCOLOR_XRGB(255, 0, 255)); v[3] = Vertex(1, -1, -1, D3DCOLOR_XRGB(0, 0, 0)); v[4] = Vertex(-1, -1, 1, D3DCOLOR_XRGB(0, 255, 0)); v[5] = Vertex(-1, 1, 1, D3DCOLOR_XRGB(0, 0, 255)); v[6] = Vertex(1, 1, 1, D3DCOLOR_XRGB(255, 255, 255)); v[7] = Vertex(1, -1, 1, D3DCOLOR_XRGB(255, 0, 255)); VB->Unlock(); |
颜色值我都是乱来的(嘻嘻)
设置视图,投影矩阵
设置渲染模式(不要是线框了)
关闭灯光
1 2 3 4 5 6 |
//渲染模式 d3ddev->SetRenderState(D3DRS_FILLMODE, D3DFILL_SOLID); //d3ddev->SetRenderState(D3DRS_FILLMODE, D3DFILL_WIREFRAME); //关闭灯光 d3ddev->SetRenderState(D3DRS_LIGHTING, false); |
开始画了
1 2 3 4 5 6 7 8 9 10 |
d3ddev->Clear(0, 0, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 0, 0), 1.0f, 0); d3ddev->BeginScene(); d3ddev->SetStreamSource(0, VB, 0, sizeof(Vertex)); d3ddev->SetIndices(VI); d3ddev->SetFVF(Vertex::FVF); d3ddev->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD); d3ddev->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, 8, 0, 12); d3ddev->EndScene(); d3ddev->Present(0, 0, 0, 0); |
多了一行,那就是
d3ddev->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD);
这里设置渲染的着色模式
可以是D3DSHADE_FLAG(不进行颜色平滑)
D3DSHADE_GOURAUD(进行颜色平滑)
运行,看结果
太漂亮了...