建立自己的3D模型文件的目的和意義我就不羅嗦了。有一些方法可以實現這個目的,我使用了D3DSDK(2004summer)版本達到了這個目的,我的方法和思路如下:
1)將.x檔用D3DX的各個函數讀出,需要讀出的有Frame,FrameTransformMatrix,Mesh,AnimationSet,Animation,AnimationKey;
2)轉化爲自己需要的文件,這裏我建立了4個文件,包括.m檔(存放mesh),.f檔(存放Frame),.a檔(存放AnimationSet)和.z檔,存放上面3個文件的索引。這4個文件都可以修改部分屬性,以達到共享texture、animation等目的。
3)完成讀這4個文檔的代碼,並建立相應的列表、樹什麼的
4)Render讀出的模型
.m檔格式如下(最複雜的就是這個檔案):
Mesh個數
{//循環,Mesh個數
Name
NumMaterials
{//循環,NumMaterials個數
MatD3D
TextureFilename
}
FVF
NumFaces
NumVertices
NumBytesPerVertex
true/false //指明是否有SkinInfo
{
NumBones
{//NumBones
BoneName
NumBoneInfluences
vertices
weights
BoneOffsetMatrix
}
}
VertexBufferSize
VertexBuffer
IndexBufferSize
IndexBuffer
.f檔保存的是二叉樹,文件格式不是很好描述,但是將Frame的二叉樹結構和TransformationMatrix寫入就可以了。
.a檔格式如下:
AnimationSet數量
{//循環
Name
Length
Animation數量
{//循環
Animation名字
TranslationKeys //每一個key都包含時間和轉換key
ScaleKeys
RotationKeys
MatrixKeys
}
}
首先要做的事情就是讀.x檔,僞代碼如下:
D3DXFileCreate
RegisterTemplates( D3DRM_XTEMPLATES, D3DRM_XTEMPLATE_BYTES )//變量在rmxfguid.h中有聲明
CreateEnumObject如果使用了UINCODE,第二個參數改成D3DXF_FILELOAD_FROMWFILE
pD3DXEnum->GetChildren( &dwDatas );
for( DWORD dw = 0; dw < dwDatas; dw ++ ) {
pD3DXEnum->GetChild( dw, &pD3DXData );
ParseObject( pD3DXData );
}
ParseObject(ID3DXFileData *pDataObj)
{
pDataObj->GetType( &Type );
if( Type == Frame ) {
// do something
}
else if( ... ) { ... }
}
ParseObject中有可能還有LoadMesh,這時候不用CreateTexture,只把Texture的文件名保存就可以了。Load完成之後別忘了將Mesh優化(OptimizeInplace)一下,使用D3DXMESHOPT_ATTRSORT參數。
由於文件的格式已經給出,其它的代碼其實就是文件的讀寫,這裏就不羅嗦了。Render部分的代碼不怎麼複雜,就是DrawIndexedPrimitive函數,這裏也不羅嗦了。
建立自己的3D模型文件
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
LayoutTransition.TransitionListener
hoolgle
2019-02-23 00:32:07
AnimatorListener
hoolgle
2019-02-23 00:32:07
可變數字印刷之ppml文檔在數碼印刷行業中的應用
qq5b0508720316c
2019-02-23 00:07:48
讀郭欣《構建高性能Web站點》筆記(1)
znlingdong
2019-02-23 13:29:59
改良程序的11個技巧
xiaovfight
2019-02-23 13:06:44
搜索引擎優化重點在超級鏈接
我是小健
2019-02-23 00:40:07
WEB頁面常用優化方法
zhenjunwei
2019-02-23 00:39:41
數據庫查詢優化原則
wxxuefeng1
2019-02-23 00:20:05
安裝完 MySQL 後必須調整的 10 項配置
kexl
2019-02-23 00:19:01
mysql優化--葉金榮老師講座筆記
kexl
2019-02-23 00:19:00