Join Date: Sep 2011
Posts: 11
|
Hi, ich habe mal mit den von CS:S "bereitgestellten" X,Y,Z Koordinaten und Pitch / Yaw für alle Spieler versucht, die 3D Koordinate eines Gegners zu einer 2D Koordinate für den Bildschirm umzurechnen. Folgende Funktion habe ich (teilweise) erstellt:
CPP Code: D3DXVECTOR3 *World2Screen(LPDIRECT3DDEVICE9 pDevice, D3DXVECTOR3 &vScreenCoord, D3DXVECTOR3 vEnemy) { if( !pDevice ) return NULL; D3DXMATRIX matProj; float fAspect = (float)(1280) / 720; D3DXMatrixPerspectiveFovRH(&matProj, (float)(D3DX_PI/180*90), fAspect, 0.1, -1); float *pX = (float*)(*(DWORD*)(Base)+0x60); float *pY = (float*)(*(DWORD*)(Base)+0x68); float *pZ = (float*)(*(DWORD*)(Base)+0x64); float *pitch = (float*)(*(DWORD*)(Base)+0x6C); float *yaw = (float*)(*(DWORD*)(Base)+0x70); D3DXVECTOR3 vEye ( *pX, *pY, *pZ); D3DXVECTOR3 vTarget ( *pX + *yaw, *pY + (*pitch * -1), *pZ); D3DXVECTOR3 vUp ( 0, 0, 1 ); D3DXMATRIX matView; D3DXMatrixLookAtRH( &matView, &vEye, &vTarget, &vUp); D3DVIEWPORT9 viewPort; D3DXMATRIX identity; pDevice->GetViewport( &viewPort ); D3DXMatrixIdentity( &identity ); D3DXVec3Project(&vScreenCoord, &vEnemy, &viewPort, &matProj, &matView, &identity ); if(vScreenCoord.z < 1) return &vScreenCoord; return NULL; }
Die Berechnung ist absolut falsch, seht selbst:
Irgendwelche Ideen, oder CS:S spezifische Funktionen ;o ?
Danke.
|