ID3DXMesh接口 创建自己的立方体网格
2013-11-14 16:44
344 查看
D3DXCreateMeshFVF
首先创建一个ID3DXMesh接口。ID3DXMesh接口的说明可以参数龙书。
这里主要是用代码来讲解:
#define VERTEX_FVF (D3DFVF_XYZ | D3DFVF_TEX1) hr = D3DXCreateMeshFVF( 12, 24, D3DXMESH_MANAGED, VERTEX_FVF, m_pd3dDevice, &pMesh ); VERTEX vertices[] = { //正y面? {-5.0f, -5.0f, 0.0f, 0,1}, {-5.0f, 5.0f, 0.0f, 0,0}, {5.0f, 5.0f, 0.0f,1,0}, {5.0f, -5.0f, 0.0f, 1,1}, //侧¨¤面?r {5.0f, -5.0f, 0.0f, 0,1}, {5.0f, 5.0f, 0.0f,0,0}, {5.0f, 5.0f, 10.0f,1,0}, {5.0f, -5.0f, 10.0f, 1,1}, //后¨®面? {5.0f, -5.0f, 10.0f, 0,1}, {5.0f, 5.0f, 10.0f,0,0}, {-5.0f, 5.0f, 10.0f, 1,0}, {-5.0f, -5.0f, 10.0f, 1,1}, {-5.0f, -5.0f, 10.0f, 0,1}, {-5.0f, 5.0f, 10.0f, 0,0}, {-5.0f, 5.0f, 0.0f, 1,0}, {-5.0f, -5.0f, 0.0f, 1,1}, {-5.0f, 5.0f, 0.0f, 0,1}, {-5.0f, 5.0f, 10.0f, 0,0}, {5.0f, 5.0f, 10.0f, 1,0}, {5.0f, 5.0f, 0.0f, 1,1}, /* {-5.0f, -5.0f, 0.0f, 0,1}, {-5.0f, -5.0f, 10.0f, 0,0}, {5.0f, -5.0f, 10.0f, 1,0}, {5.0f, -5.0f, 0.0f, 1,1}*/ {-5.0f, -5.0f, 0.0f, 0,1}, {5.0f, -5.0f, 0.0f, 0,0}, {5.0f, -5.0f, 10.0f, 1,0}, {-5.0f, -5.0f, 10.0f, 1,1}, //底下的面。需要用逆时针。不然会被剔除 }; 把上面的顶点数据拷贝到 网格里面 void* pBuffer; pMesh->LockVertexBuffer(0,(void**)&pBuffer); memcpy(pBuffer,vertices,sizeof(vertices)); pMesh->UnlockVertexBuffer(); 接着创建 索引数据 WORD* i = 0; pMesh->LockIndexBuffer(0, (void**)&i); // fill in the front face index data i[0] = 0; i[1] = 1; i[2] = 2; i[3] = 0; i[4] = 2; i[5] = 3; // fill in the back face index data i[6] = 4; i[7] = 5; i[8] = 6; i[9] = 4; i[10] = 6; i[11] = 7; // fill in the top face index data i[12] = 8; i[13] = 9; i[14] = 10; i[15] = 8; i[16] = 10; i[17] = 11; // fill in the bottom face index data i[18] = 12; i[19] = 13; i[20] = 14; i[21] = 12; i[22] = 14; i[23] = 15; // fill in the left face index data i[24] = 16; i[25] = 17; i[26] = 18; i[27] = 16; i[28] = 18; i[29] = 19; // fill in the right face index data i[30] = 20; i[31] = 21; i[32] = 22; i[33] = 20; i[34] = 22; i[35] = 23; pMesh->UnlockIndexBuffer(); //下面是创建了6个集合,创建多少个接口。后面就需要绘制几个集合 DWORD* attributeEuffer = 0; pMesh->LockAttributeBuffer(0,&attributeEuffer); for ( int a = 0; a < 2; a++) { attributeEuffer[a] = 0; } for ( int b = 2; b < 4; b++) { attributeEuffer[b] = 1; } for ( int c = 4; c < 6; c++) { attributeEuffer[c] = 2; } //优化 hr = pMesh->OptimizeInplace( D3DXMESHOPT_ATTRSORT | D3DXMESHOPT_COMPACT | D3DXMESHOPT_VERTEXCACHE, &adjacencyBuffer[0], 0, 0, 0); for ( int c = 6; c < 8; c++) { attributeEuffer[c] = 3; } for ( int c = 8; c < 10; c++) { attributeEuffer[c] = 4; } for ( int c = 10; c < 12; c++) { attributeEuffer[c] = 5; } pMesh->UnlockAttributeBuffer(); std::vector<DWORD> adjacencyBuffer(pMesh->GetNumFaces() * 3); pMesh->GenerateAdjacency(0.0f, &adjacencyBuffer[0]); for(int i = 0; i < 6; i++) { pMesh->DrawSubset( i ); }
相关文章推荐
- [JavaScript] JS实现上传图片及时预览
- Servlet生命周期
- 采用Filter统一验证是否登录
- Hough变换原理---从图像中识别几何图形,确定其参数
- 大津法---OTSU算法
- 关于inline---代替宏定义
- 在word中,怎么插入一条水平线、粗线、波浪线、双直线、虚线 -------自动边框线
- Opencv2.3.1在VS2010平台上安装配置图解(64位系统)
- 遇到的问题------基于OPENCV的车流量识别
- MFC打开文件对话框
- 修改win7开机界面打造属于自己风格的win7开机动画
- Altium中 PCB的覆铜步骤与注意点
- [转]matlab中plot用法
- 杭电2032题
- OpenCV处理像素值
- ORA-000845 与 /dev/shm(tempfs)
- MFC中静态文本框等静态控件的的修改
- MFC中实现 灯 的效果
- 解决cookie中文乱码问题
- MFC中按钮的隐藏和显示