上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
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 星期三 文章主題: |
|
|
那麼 請問那裡有多些關於這方面的可看
謝謝 |
|
回頂端 |
|
|
lsk 喜歡上這裡的冒險者
註冊時間: 2007-06-20 文章: 93
20.59 果凍幣
|
發表於: 2008-5-15, AM 1:27 星期四 文章主題: |
|
|
sagapo909 寫到: | 那麼 請問那裡有多些關於這方面的可看
謝謝 |
找有關於computer graphics的書就對了。中文的話,一些介紹direct3d的書也會說明這些東西。
還有網路上的話可以去wikipedia,不過我覺得上面的英文資料比起中文的,質量都好很多。
http://en.wikipedia.org/wiki/Wiki |
|
回頂端 |
|
|
sagapo909 稍嫌羞澀的路人
註冊時間: 2008-05-14 文章: 2
0.00 果凍幣
|
發表於: 2008-5-16, AM 1:33 星期五 文章主題: |
|
|
非常感謝 |
|
回頂端 |
|
|
|