【C++】 DirectX初心者質問スレ Part28 【C】
■ このスレッドは過去ログ倉庫に格納されています
0036デフォルトの名無しさん
2010/03/21(日) 23:59:56SSE2を無効化してもD3DXVec3Unprojectに誤差が出る。完全に同じは無理だった。残念。
で、これをみるとわかるが、D3DXVec3Unprojectの結果をD3DXVec3Projectしても元には戻らないね。
D3DXVECTOR3 * MyD3DXVec3Project(D3DXVECTOR3 * pOut, CONST D3DXVECTOR3 * pV,
CONST D3DVIEWPORT9 * pViewport, CONST D3DXMATRIX * pProjection,
CONST D3DXMATRIX * pView, CONST D3DXMATRIX * pWorld)
{
D3DXMATRIX matWVP = *pWorld * *pView * *pProjection;
D3DXVECTOR3 vTmp;
D3DXVec3TransformCoord(&vTmp, pV, &matWVP);
pOut->x = pViewport->X + (1.0f + vTmp.x ) * pViewport->Width * 0.5f;
pOut->y = pViewport->Y + (1.0f - vTmp.y ) * pViewport->Height * 0.5f;
pOut->z = pViewport->MinZ + vTmp.z * ( pViewport->MaxZ - pViewport->MinZ);
return pOut;
}
D3DXVECTOR3 * MyD3DXVec3Unproject(D3DXVECTOR3 * pOut, CONST D3DXVECTOR3 * pV,
CONST D3DVIEWPORT9 * pViewport, CONST D3DXMATRIX * pProjection,
CONST D3DXMATRIX * pView, CONST D3DXMATRIX * pWorld)
{
D3DXMATRIX matViewport(
pViewport->Width * 0.5f, 0, 0, 0,
0, -(pViewport->Height * 0.5f), 0, 0,
0, 0, pViewport->MaxZ - pViewport->MinZ, 0,
pViewport->X + pViewport->Width * 0.5f, pViewport->Y + pViewport->Height * 0.5f, pViewport->MinZ, 1.f);
D3DXMATRIX matWVPVp = *pWorld * *pView * *pProjection * matViewport;
D3DXMatrixInverse(&matWVPVp, NULL, &matWVPVp);
D3DXVECTOR3 vTmp;
D3DXVec3TransformCoord(&vTmp, pV, &matWVPVp);
*pOut = (D3DXVECTOR3&)vTmp;
return pOut;
}
■ このスレッドは過去ログ倉庫に格納されています