看看我的代码,不能正常运行.
  OINT p; GetCursorPos(&p); ScreenToClient(g_hWnd,&p); static D3DXMATRIXA16 matView,matProj; g_d3dDevice->GetTransform(D3DTS_VIEW,&matView); g_d3dDevice->GetTransform(D3DTS_PROJECTION,&matProj); static D3DXMATRIXA16 matInvV; D3DXMatrixInverse(&matInvV,0,&matView); //计算射线的方向和原点 D3DXVECTOR3 vecTemp,vPickVecDir,vPickOrigin; vecTemp.x = ( ( (2.0f*p.x) / g_desc.Width ) - 1 )/matProj._11; vecTemp.y =-( ( (2.0f*p.y) / g_desc.Height) - 1 )/matProj._22; vecTemp.z = 1.0f;
vPickVecDir.x = vecTemp.x*matInvV._11 + vecTemp.y*matInvV._21 + vecTemp.z*matInvV._31; vPickVecDir.y = vecTemp.x*matInvV._12 + vecTemp.y*matInvV._22 + vecTemp.z*matInvV._32; vPickVecDir.z = vecTemp.x*matInvV._13 + vecTemp.y*matInvV._23 + vecTemp.z*matInvV._33;
vPickOrigin.x = matInvV._41; vPickOrigin.y = matInvV._42; vPickOrigin.z = matInvV._43;
//计算是否和地面网格相交 BOOL hited=FALSE; DWORD faceIndex=-1; FLOAT bu=0.0f; FLOAT bv=0.0f; const LPD3DXMESH pMesh = m_pTerrian->GetMesh(); if(SUCCEEDED(D3DXIntersect(pMesh,&vPickOrigin,&vPickVecDir //这里使用的是Mesh的什么坐标?(物体or世界) ,&hited,&faceIndex,&bu,&bv,0,0,0))) { if(hited)//点中 { //获得三角形顶点坐标 LPDIRECT3DINDEXBUFFER9 pIndices=0; LPDIRECT3DVERTEXBUFFER9 pVertices=0; pMesh->GetIndexBuffer(&pIndices); pMesh->GetVertexBuffer(&pVertices); WORD* w=0; if(FAILED(pIndices->Lock(0,0,(LPVOID*)&w,0))) { SAFE_RELEASE(pIndices); SAFE_RELEASE(pVertices); return; } WORD vi1=w[fontIndex*3+0];//顶点索引 WORD vi2=w[fontIndex*3+1]; WORD vi3=w[fontIndex*3+2]; pIndices->Unlock(); SAFE_RELEASE(pIndices); BYTE* bp=0; if(FAILED(pVertices->Lock(0,0,(LPVOID*)&bp,0))) { SAFE_RELEASE(pIndices); SAFE_RELEASE(pVertices); return; } DWORD verTexSize=pMesh->GetNumBytesPerVertex(); D3DXVECTOR3 v1 = *(D3DXVECTOR3*)(bp[verTexSize*vi1]); //指针总是非法 D3DXVECTOR3 v2 = *(D3DXVECTOR3*)(bp[verTexSize*vi2]); D3DXVECTOR3 v3 = *(D3DXVECTOR3*)(bp[verTexSize*vi3]); pVertices->Unlock(); SAFE_RELEASE(pVertices); D3DXVECTOR3 target = v1 + bu*(v2-v1) + bv*(v3-v1); m_pPlayer->SetPosition(target); } }
我有个两问题不明白,这里面用的Mesh在计算的时候是使用自己的物体坐标,还是被世界矩阵转换之后的坐标?
还有我计算顶点数据指针偏移那里为什么会出错?
|