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

Google
再次請問 如何讓滑鼠正確的點在我所指的三角型上的一點

 
發表新主題   回覆主題    電腦遊戲製作開發設計論壇 首頁 -> 遊戲程式高級班:DirectX、OpenGL及各種圖型函式庫
上一篇主題 :: 下一篇主題  
發表人 內容
etjon
稍嫌羞澀的路人


註冊時間: 2011-09-28
文章: 1

45.48 果凍幣

發表發表於: 2011-9-28, AM 8:53 星期三    文章主題: 再次請問 如何讓滑鼠正確的點在我所指的三角型上的一點 引言回覆

利用以上的範例將 pickmap 再修改如下,我想修改當滑鼠點選到某一個共用點或某一點時,程式會停在我選取的點上,我利用公式
IntersectPoint = V1 + U*(V2-V1) + V*(V3-V1) ;
但為什麼沒有反應是不能這樣寫嗎?



bool ZCamera::pickmap(LPD3DXMESH pMesh,D3DXVECTOR3 v0,D3DXVECTOR3 v1,D3DXVECTOR3 v2,D3DXMATRIX matWorld,BOOL b_moxing)
{
D3DXVECTOR3 vPickRayDir;
D3DXVECTOR3 vPickRayOrig;
BOOL pHit=NULL;
DWORD *pFaceIndex=NULL;
FLOAT *pU=NULL;
FLOAT *pV=NULL;
FLOAT *pDist=NULL;
LPD3DXBUFFER *ppAllHits=NULL;
DWORD *pCountOfHits=NULL;
D3DXMATRIX matProj;
FLOAT fBary1, fBary2, fDist;
g_pMyd3dDevice->GetTransform( D3DTS_PROJECTION, &matProj );

POINT ptCursor;
GetCursorPos( &ptCursor );
ScreenToClient( hwnd, &ptCursor );

D3DXVECTOR3 v;
v.x = ( ( ( 2.0f * ptCursor.x ) / 1440) - 1 ) / matProj._11;
v.y = -( ( ( 2.0f * ptCursor.y ) /900) - 1 ) / matProj._22;
v.z = 1.0f;

RECT wndRect;
GetClientRect( hwnd, &wndRect );

v.x = ( ( ( 2.0f * ptCursor.x ) / wndRect.right) - 1 ) / matProj._11;
v.y = -( ( ( 2.0f * ptCursor.y ) /wndRect.bottom) - 1 ) / matProj._22;
v.z = 1.0f;

static bool b = false;
//if(!b)
{
////FILE *fp = fopen("C:\\1.txt","at+");
//fprintf(fp,"x:%d y:%d,x:%d y:%d\n",ptCursor.x,ptCursor.y,wndRect.right,wndRect.bottom );
//fclose(fp);
//b = true;

}


D3DXMATRIX matView, m;
g_pMyd3dDevice->GetTransform( D3DTS_VIEW, &matView );
matView=matWorld*matView;
D3DXMatrixInverse( &m, NULL, &matView);

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;
/*

HRESULT D3DXIntersect(
LPD3DXBASEMESH pMesh,
CONST D3DXVECTOR3 *pRayPos,
CONST D3DXVECTOR3 *pRayDir,
BOOL *pHit,
DWORD *pFaceIndex,
FLOAT *pU,
FLOAT *pV,
FLOAT *pDist,
LPD3DXBUFFER *ppAllHits,
DWORD *pCountOfHits
);
l pMesh指向一?ID3DXBaseMesh的?象,最??的方式是?.x文件?得,描述了要?行相交??的三角面元集合的信息,具体?范??direct9 SDK
l pRayPos 指向射??出?
l pRayDir 指向前面我?辛辛苦苦求出的射?方向的向量
l pHit ???到相交?元?,指向一?true,不与任何?元相交??假
l pU 用于返回重心坐?U分量
l pV返回重心坐?V分量
l pDist 返回射??出?到相交?的?度
注意:以上?色字体部分均指最近的一?返回?果(即*pDist最小)
l ppAllHits用于如果存在多?相交三角面返回相交的所有?果
l pCountOfHits 返回共有多少?三角形与?射?相交

*/

if (b_moxing)
D3DXIntersect(pMesh,&vPickRayOrig,&vPickRayDir,&pHit,pFaceIndex,pU,pV,pDist,ppAllHits,pCountOfHits);
else
pHit=IntersectTriangle(vPickRayOrig,vPickRayDir,v0,v1,v2,&fDist,&fBary1,&fBary2);

if( pHit==true)
{
D3DXVECTOR3 point,t;
// 依公式 IntersectPoint = V1 + U*(V2-V1) + V*(V3-V1) ;

point = v0 + fBary1*(v1-v0) + fBary2*(v2-v0); << 依公式加的處理程式


int a;

if( point == v0 ) // 若有點選到 v0 則停在這
{
a = 1;
}else if( point == v1 ) // 若有點選到 v1 則停在這

{
a = 2;
}else if( point ==v2)// 若有點選到 v2 則停在這

{
a = 3;
}


}
return pHit;
}



GAME.zip
 描述:

下載
 檔名:  GAME.zip
 附件大小:  4.1 KB
 下載次數:  共 388 次

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

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


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