電腦遊戲製作開發設計論壇 首頁 電腦遊戲製作開發設計論壇
任何可以在PC上跑的遊戲都可以討論,主要以遊戲之製作開發為主軸,希望讓台灣的遊戲人有個討論、交流、教學、經驗傳承的園地
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入 

Google
[範例] Direct3D9 - Mesh 動態模型
前往頁面 上一頁  1, 2
 
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 遊戲程式高級班:DirectX、OpenGL及各種圖型函式庫
上一篇主題 :: 下一篇主題  
發表人 內容
Zero
偶而上來逛逛的過客


註冊時間: 2009-01-04
文章: 10

0.00 果凍幣

發表發表於: 2009-1-13, PM 10:36 星期二    文章主題: 引言回覆

模型檔案是版主讓入下戴的147ef2685d960c.rar壓縮檔內的123456.x模型,
希望各位先進能幫小弟解惑謝謝
回頂端
檢視會員個人資料 發送私人訊息
Zero
偶而上來逛逛的過客


註冊時間: 2009-01-04
文章: 10

0.00 果凍幣

發表發表於: 2009-1-13, PM 10:37 星期二    文章主題: 引言回覆

另外再請教各位先進:
  要如何才可以上傳檔案呢?
回頂端
檢視會員個人資料 發送私人訊息
mirror
散播福音的祭司


註冊時間: 2007-07-27
文章: 174

828.60 果凍幣

發表發表於: 2009-1-13, PM 11:51 星期二    文章主題: Re: [範例] Direct3D9 - Mesh 動態模型 引言回覆

Mesh.Draw();的上面少了這一行


Mesh.pAnimationContainer->AdvanceTime(Time, NULL);


另外這個模型沒有設定動畫名稱
所以不用去抓動畫名稱來用..

改天我有上傳動畫模型的時候你再下載來測試吧..
到時我會註明上面有哪些名稱可以用

這個論壇沒有空間可以給你上傳檔案
要自己去找..
回頂端
檢視會員個人資料 發送私人訊息
Zero
偶而上來逛逛的過客


註冊時間: 2009-01-04
文章: 10

0.00 果凍幣

發表發表於: 2009-1-14, PM 12:05 星期三    文章主題: 引言回覆

首先先感謝mirror先進您的回覆您真有心,非常感謝您。

目前我有依照你說的有在Mesh.Draw();的上面再加一行SetTime();但模型它還是不會正常動作,我覺得比較有問題的是,因為我是使用DirectX9.0b的版本,對於原程式內有一些函式例如AdvanceTime(),ResetTime(),
GetAnimationSetByName()我沒辨法使用,我在想是否我使用的替代的函式有問題,

AdvanceTime(),我使用SetTime()
ResetTime(),找不到類似的功能函式,註解掉
GetAnimationSetByName(cString[1],&ppAnimSet),我使用GetAnimationSet(0,&ppAnimSet)

不知道是不是這幾句的關係,請先進幫我看一下是否那裡還有可能造成錯誤,謝謝
回頂端
檢視會員個人資料 發送私人訊息
mirror
散播福音的祭司


註冊時間: 2007-07-27
文章: 174

828.60 果凍幣

發表發表於: 2009-1-14, PM 9:09 星期三    文章主題: 引言回覆

9.0b現在還有人在用嗎?(不清楚)
很抱歉幫不上忙..
9.0c的使用者也在減少了吧..
差不多快要進入dx10以上的時代了..

不過那個提供的動態範例
下載來用9.0c是正常的..

未來新的功能寫法可能也會做大改革也不一定
先從容易著手的去做吧
回頂端
檢視會員個人資料 發送私人訊息
mirror
散播福音的祭司


註冊時間: 2007-07-27
文章: 174

828.60 果凍幣

發表發表於: 2009-2-3, PM 1:32 星期二    文章主題: 引言回覆

補上3D多動畫繪製的相關說明
網址在這裡:http://data.gameres.com/document.asp?TopicID=90899
回頂端
檢視會員個人資料 發送私人訊息
mirror
散播福音的祭司


註冊時間: 2007-07-27
文章: 174

828.60 果凍幣

發表發表於: 2009-6-2, PM 1:26 星期二    文章主題: 引言回覆

實際內容請參考NPC大大提供的範例
有其它問題再來補充@@

【1】.建立D3D視窗
【2】.建立AnimatedMesh類別(產生新類別)
【3】.建立D3DXFRAME_DERIVE:D3DXFRAME框架pFrameRoot

代碼:

struct D3DXFRAME_DERIVED: public D3DXFRAME
{
   D3DXMATRIXA16     CombinedTransformationMatrix;
};

D3DXFRAME_DERIVED           * pFrameRoot;





【4】.實作ID3DXAllocateHierarchy界面(配置架構)


※ID3DXAllocateHierarchy為抽象類別
所以最起碼要實作CreateFrame、CreateMeshContainer、DestroyFrame、DestroyMeshContainer四個函數

代碼:

  class CAllocateHierarchy : public ID3DXAllocateHierarchy
  {
      STDMETHOD (CreateFrame) (LPCSTR Name, LPD3DXFRAME *ppNewFrame);
      STDMETHOD (CreateMeshContainer) (LPCSTR Name, CONST D3DXMESHDATA *pMeshData, CONST D3DXMATERIAL *pMaterials, CONST D3DXEFFECTINSTANCE *pEffectInstances, DWORD NumMaterials, CONST DWORD *pAdjacency, LPD3DXSKININFO pSkinInfo, LPD3DXMESHCONTAINER *ppNewMeshContainer);
      STDMETHOD (DestroyFrame) (LPD3DXFRAME pFrameToFree);
      STDMETHOD (DestroyMeshContainer) (LPD3DXMESHCONTAINER pMeshContainerBase);
      CHAR* AllocName (CHAR* Name);
      HRESULT GenerateSkinnedMesh (IDirect3DDevice9 *pDevice, D3DXMESHCONTAINER_DERIVED *pMeshContainer);
  };







【5】.導入模型檔(D3DXLoadMeshHierarchyFromX)
必備資訊:
1.配置架構(ID3DXAllocateHierarchy)
2.框架pFrameRoot(D3DXFRAME_DERIVED:D3DXFRAME)
3.網格動畫容器pAnimationContainer(ID3DXAnimationController))





【6】.建立網格容器(pMeshContainer 即傳入的 pMeshContainerBase 位址)設定骨骼到網格上(SetupBoneMatrixPointersOnMesh、SetupBoneMatrixPointers)
(它在這裡是用遞迴的方式,不過建議改用迴圈代替,否則程式執行速度會下降很多)

代碼:

HRESULT AnimatedMesh::SetupBoneMatrixPointersOnMesh (LPD3DXMESHCONTAINER pMeshContainerBase)
{
  D3DXMESHCONTAINER_DERIVED *pMeshContainer = (D3DXMESHCONTAINER_DERIVED*)pMeshContainerBase;

  // if there is a skinmesh, then setup the bone matrices
  if (pMeshContainer->pSkinInfo != NULL)
  {
    UINT iBone, cBones;
    D3DXFRAME_DERIVED *pFrame;

    cBones = pMeshContainer->pSkinInfo->GetNumBones();
    pMeshContainer->ppBoneMatrixPtrs = new D3DXMATRIX*[cBones];

    if (pMeshContainer->ppBoneMatrixPtrs == NULL)
      return E_OUTOFMEMORY;

    for (iBone = 0; iBone < cBones; iBone++)
    {
      pFrame = (D3DXFRAME_DERIVED*)D3DXFrameFind(pFrameRoot, pMeshContainer->pSkinInfo->GetBoneName(iBone) );
      if (pFrame == NULL)
        return E_FAIL;

      pMeshContainer->ppBoneMatrixPtrs[iBone] = &pFrame->CombinedTransformationMatrix;
    }
  }

  return D3D_OK;
}

HRESULT AnimatedMesh::SetupBoneMatrixPointers (LPD3DXFRAME pFrame)
{
  HRESULT hr;

  if (pFrame->pMeshContainer != NULL)
  {
    hr = SetupBoneMatrixPointersOnMesh(pFrame->pMeshContainer);
    if (hr != D3D_OK)
      return hr;
  }

  if (pFrame->pFrameSibling != NULL)
  {
    hr = SetupBoneMatrixPointers(pFrame->pFrameSibling);
    if (hr != D3D_OK)
      return hr;
  }

  if (pFrame->pFrameFirstChild != NULL)
  {
    hr = SetupBoneMatrixPointers(pFrame->pFrameFirstChild);
    if (hr != D3D_OK)
      return hr;
  }

  return D3D_OK;
}

回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 遊戲程式高級班:DirectX、OpenGL及各種圖型函式庫 所有的時間均為 台灣時間 (GMT + 8 小時)
前往頁面 上一頁  1, 2
2頁(共2頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
可以 在這個版面附加檔案
可以 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作