Worldtoscreen або розробка box esp

WorldToScreen або розробка box esp

Привіт всім, тривалий час намагаюся розібратися що ж із себе представляє цей набір значень, точніше матриця необхідна для перекладу з 3d положення гравця на 2d екран.
Успішно знайшов потрібні значення для CSS 80+, але дуже довго шукав цю матрицю, буквально навмання вдалося її знайти.
Хоч приблизно та ясно що там повинні бути значення проекції, камери гравця, не зрозуміло які саме з 16 що є що.
Вивів весь цей двовимірний масив на екран (float Mass [4] [4] по суті це частина структури в пам'яті гри), але це мало чим допомогло, хіба що в рази швидше стали оновлюватися дані.
Коротше, підкажіть хто як шукає ці всі значення, якими функціями перекладу користуєтеся. Сам вивчаю першу функцію.
з відомих мені, ось кілька, може знайдеться і ваша:

Від флипа, підправлений мною для використання в d3d:

bool WorldToScreen (float * from, float * to)

to [0] = MyPlayer.WorldToScreenMatrix.flMatrix [0] [0] * from [0] + MyPlayer.WorldToScreenMatrix.flMatrix [0] [1] * from [1] + MyPlayer.WorldToScreenMatrix.flMatrix [0] [2] * from [2] + MyPlayer.WorldToScreenMatrix.flMatrix [0] [3];
to [1] = MyPlayer.WorldToScreenMatrix.flMatrix [1] [0] * from [0] + MyPlayer.WorldToScreenMatrix.flMatrix [1] [1] * from [1] + MyPlayer.WorldToScreenMatrix.flMatrix [1] [2] * from [2] + MyPlayer.WorldToScreenMatrix.flMatrix [1] [3];
w = MyPlayer.WorldToScreenMatrix.flMatrix [3] [0] * from [0] + MyPlayer.WorldToScreenMatrix.flMatrix [3] [1] * from [1] + MyPlayer.WorldToScreenMatrix.flMatrix [3] [2] * from [ 2] + MyPlayer.WorldToScreenMatrix.flMatrix [3] [3];

if (w <0.01f)
return false;

float invw = 1.0f / w;
to [0] * = invw;
to [1] * = invw;

int width = viewP_ESP.Width;
int height = viewP_ESP.Height;

float x = width / 2;
float y = height / 2;

x + = 0.5 * to [0] * width + 0.5;
y - = 0.5 * to [1] * height + 0.5;

to [0] = x + / * WindowRect.left * / viewP_ESP.Height;
to [1] = y + / * WindowRect.top; * / viewP_ESP.Width;

D3DXVECTOR3 WorldToScreen (D3DXVECTOR3 in)
D3DXVECTOR3 out, temp;

D3DXVec3Subtract (temp, in, InvViewTranslation);
float x = D3DXVec3Dot (temp, InvViewRight);
float y = D3DXVec3Dot (temp, InvViewUp);
float z = D3DXVec3Dot (temp, InvViewForward);

out.x = ViewPortMatrix.x * (1 + (x / ProjD1.x / z));
out.y = ViewPortMatrix.y * (1 - (y / ProjD2.y / z));
out.z = z;

bool WorldToScreen (D3DXVECTOR3 inpos, D3DXVECTOR3 outpos, LPDIRECT3DDEVICE9 pDevice)


DWORD dwRenderData = (DWORD) GetModuleHandleA ( "engine.dll") + 0x3B5260;
CRenderData * RenderData = (CRenderData *) (dwRenderData);

D3DXVECTOR3 vScreen;
D3DVIEWPORT9 g_ViewPort;

pDevice-> GetViewport (g_ViewPort);
g_ViewPort.X = g_ViewPort.Y = 0;
g_ViewPort.MinZ = 0;
g_ViewPort.MaxZ = 1;
D3DXVec3Project (vScreen, inpos, g_ViewPort,
RenderData-> RenderData-> ProjectMatrix,
RenderData-> RenderData-> ViewMatrix,
RenderData-> RenderData-> WorldMatrix);

if (vScreen.z <1.0f && vScreen.x> 0.0f vScreen.y> 0.0f vScreen.x outpos.x = vScreen.x;
outpos.y = vScreen.y;
outpos.z = vScreen.z;

Теж фліп, але в сорци на COD4:

// Grabs our 3d Coordinates and changes them to 2d for us to play with
// ------------------------------------------------ ---------------------------
/ * Bool ESP_WorldToScreen (Vect3d WorldLocation, Vect3d mypos)
Vect3d vLocal, vTransForm;
vForward = new Vect3d ();
vRight = new Vect3d ();
vUpward = new Vect3d ();

ESP_AngleVectors ();
vLocal = ESP_SubVectorDist (WorldLocation, mypos);

vTransForm.x = vLocal.dotproduct (* vRight);
vTransForm.y = vLocal.dotproduct (* vUpward);
vTransForm.z = vLocal.dotproduct (* vForward);

if (vTransForm.z <0.01)
return false;

ScreenX = screencenter [0] + (screencenter [0] / vTransForm.z * (1 / fov [0])) * vTransForm.x;
ScreenY = screencenter [1] - (screencenter [1] / vTransForm.z * (1 / fov [1])) * vTransForm.y;

Re: WorldToScreen або розробка box esp

ти не правильне маєш уявлення про матрицях. згадай 10-11 клас - по-любому прогулював уроки з тригонометрії, почни з простою. по-мойму двомірної матриці і далі все зрозумієш. я сам не шарю в матрицях. але розрахунки розумію як і від чого залежить огляд і розміри виведеної на екран картинки, а якщо ти просто хочеш зрозуміти як розрахувати переклад координат з 3д в 2д - то знати як матриця працює не потрібно взагалі