您的位置:首页 > 其它

图形学 Direct3D中手动创建3D模型

2013-10-26 19:55 495 查看
手动写一个模型是非常麻烦的,这就是为什么需要美工来做3D模型,美工利用各种可视化的软件如:3DSmax,maya,Blender等等,那样方便做出各种3d模型。如果手工设置,直接编程出来的话,工作量会相当大,甚至不一定能做出我们想要的模型,但是理论上这是可能的,所以我们看看如何做。

属性表

当模型的mesh被优化,那么它会如下排序:



属性表就是一个D3DXATTRIBUTERANGE的数组:

typedefstruct_D3DXATTRIBUTERANGE{
DWORDAttribId;
DWORDFaceStart;
DWORDFaceCount;
DWORDVertexStart;
DWORDVertexCount;
}D3DXATTRIBUTERANGE;


Cloning

拷贝一个模型mesh到另外一个模型mesh中:

HRESULTID3DXMesh::CloneMesh(
DWORDOptions,
constD3DVERTEXELEMENT9*pDeclaration,
LPDIRECT3DDEVICE9pDevice,
LPD3DXMESH*ppCloneMesh
);


如下,拷贝meshSys到temp容器。

D3DVERTEXELEMENT9elements[]=
{
{0,0,D3DDECLTYPE_FLOAT3,D3DDECLMETHOD_DEFAULT,D3DDECLUSAGE_POSITION,0},
{0,12,D3DDECLTYPE_FLOAT3,D3DDECLMETHOD_DEFAULT,D3DDECLUSAGE_NORMAL,0},
{0,24,D3DDECLTYPE_FLOAT2,D3DDECLMETHOD_DEFAULT,D3DDECLUSAGE_TEXCOORD,0},
D3DDECL_END()
};

ID3DXMesh*temp=0;
HR(meshSys->CloneMesh(D3DXMESH_SYSTEMMEM,
elements,gd3dDevice,&temp));


手动创建一个空的Mesh(DSDXCreateMesh)

如下:但是那么需要手动来填写相关属性,会非常麻烦;这就是为什么需要可视化工具来做3d模型。

HRESULTWINAPID3DXCreateMesh(
DWORDNumFaces,
DWORDNumVertices,
DWORDOptions,
constLPD3DVERTEXELEMENT9*pDeclaration,
LPDIRECT3DDEVICE9pD3DDevice,
LPD3DXMESH*ppMesh
);



使用范例:

D3DVERTEXELEMENT9elements[]=
{
{0,0,D3DDECLTYPE_FLOAT3,D3DDECLMETHOD_DEFAULT,D3DDECLUSAGE_POSITION,0},
{0,12,D3DDECLTYPE_FLOAT3,D3DDECLMETHOD_DEFAULT,D3DDECLUSAGE_NORMAL,0},
{0,24,D3DDECLTYPE_FLOAT2,D3DDECLMETHOD_DEFAULT,D3DDECLUSAGE_TEXCOORD,0},
D3DDECL_END()
};

ID3DXMesh*mesh=0;
HR(D3DXCreateMesh(12,24,D3DXMESH_MANAGED,elements,
gd3dDevice,&mesh));//创建一个空的3D模型。


然后手动填写其中相关的属性,那么理论上就可以做出各种3D模型。当然只是理论上罢了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: