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

Google
[範例] Direct3D9 - Pick Mesh (滑鼠拾取模型)

 
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 遊戲程式高級班:DirectX、OpenGL及各種圖型函式庫
上一篇主題 :: 下一篇主題  
發表人 內容
npcgamer
時常出沒的會員


註冊時間: 2007-11-02
文章: 47

3.00 果凍幣

發表發表於: 2008-4-11, AM 10:29 星期五    文章主題: [範例] Direct3D9 - Pick Mesh (滑鼠拾取模型) 引言回覆

話說原理我也不太了解,不過,程式碼蠻簡短的。取自 DirectX SDK 的 Pick 範例。參數 X, Y 是滑鼠座標。

代碼:
bool PickMesh (DWORD X, DWORD Y)
{
  D3DXVECTOR3 vPickRayDir;
  D3DXVECTOR3 vPickRayOrig;

  // Get the pick ray from the mouse position
  {
    D3DXMATRIX  matrixProjection;
    pDevice->GetTransform(D3DTS_PROJECTION, &matrixProjection);

    // Compute the vector of the pick ray in screen space
    D3DVIEWPORT9  Viewport;
    pDevice->GetViewport(&Viewport);

    D3DXVECTOR3 v;
    v.x = (2.0f * X / Viewport.Width - 1) / matrixProjection._11;
    v.y = -(2.0f * Y / Viewport.Height - 1) / matrixProjection._22;
    v.z =  1.0f;

    // Get the inverse view matrix
    D3DXMATRIX  matrixView, matrixWorld;

    pDevice->GetTransform(D3DTS_VIEW, &matrixView);
    pDevice->GetTransform(D3DTS_WORLD, &matrixWorld);

    D3DXMATRIX matrixWorldView = matrixWorld * matrixView;
    D3DXMATRIX m;
    D3DXMatrixInverse(&m, NULL, &matrixWorldView);

    // Transform the screen space pick ray into 3D space
    vPickRayDir.x  = v.x*m._11 + v.y*m._21 + v.z*m._31;
    vPickRayDir.y  = v.x*m._12 + v.y*m._22 + v.z*m._32;
    vPickRayDir.z  = v.x*m._13 + v.y*m._23 + v.z*m._33;
    vPickRayOrig.x = m._41;
    vPickRayOrig.y = m._42;
    vPickRayOrig.z = m._43;
  }

  // Get the picked triangle
  {
    BOOL bHit;
    DWORD dwFace;
    FLOAT fBary1, fBary2, fDist;

    D3DXIntersect(pMesh, &vPickRayOrig, &vPickRayDir, &bHit, &dwFace, &fBary1, &fBary2, &fDist, NULL, NULL);
    if (bHit)
    {
      return true;
    }
  }
  return false;
}
回頂端
檢視會員個人資料 發送私人訊息
vamper
對這略感興趣的新人


註冊時間: 2007-06-23
文章: 29
來自: 台灣
18.82 果凍幣

發表發表於: 2008-4-11, PM 6:18 星期五    文章主題: 引言回覆

對常寫shader的來說,其實不難。

只是空間上的轉換:

viewport space -> projection space -> view space -> world space 。

多去看一些3D空間轉換和反矩陣的特性。

比較難的部分是包在D3DXIntersect function裡面的數學。
回頂端
檢視會員個人資料 發送私人訊息 參觀發表人的個人網站
sagapo909
稍嫌羞澀的路人


註冊時間: 2008-05-14
文章: 2

0.00 果凍幣

發表發表於: 2008-5-14, AM 1:48 星期三    文章主題: 引言回覆

那麼 請問那裡有多些關於這方面的可看 Question

謝謝
回頂端
檢視會員個人資料 發送私人訊息
lsk
喜歡上這裡的冒險者


註冊時間: 2007-06-20
文章: 93

20.59 果凍幣

發表發表於: 2008-5-15, AM 1:27 星期四    文章主題: 引言回覆

sagapo909 寫到:
那麼 請問那裡有多些關於這方面的可看 Question

謝謝

找有關於computer graphics的書就對了。中文的話,一些介紹direct3d的書也會說明這些東西。

還有網路上的話可以去wikipedia,不過我覺得上面的英文資料比起中文的,質量都好很多。

http://en.wikipedia.org/wiki/Wiki
回頂端
檢視會員個人資料 發送私人訊息
sagapo909
稍嫌羞澀的路人


註冊時間: 2008-05-14
文章: 2

0.00 果凍幣

發表發表於: 2008-5-16, AM 1:33 星期五    文章主題: 引言回覆

引言回覆:
找有關於computer graphics的書就對了。中文的話,一些介紹direct3d的書也會說明這些東西。

還有網路上的話可以去wikipedia,不過我覺得上面的英文資料比起中文的,質量都好很多。

http://en.wikipedia.org/wiki/Wiki



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

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


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