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.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д - то знати як матриця працює не потрібно взагалі