Vec3* mathVec3Project(Vec3* pvMin, const Vec3* pvObj, const int32 pViewport[4], const Matrix44* pProjection, const Matrix44* pView, const Matrix44* pWorld)
{
return CallFunction<Vec3 * (__fastcall*)(Vec3*, const Vec3*, const int32[], const Matrix44*, const Matrix44*, const Matrix44*)>(0x140E286E0)(pvMin, pvObj, pViewport, pProjection, pView, pWorld);
}
void ProjectToScreen(Vec3 vIn, Vec3& vOut)
{
PDWORD pRenderThread = *(PDWORD*)((DWORD64)this + 0x8D60);
DWORD v5 = pRenderThread[51];
if (v5 != pRenderThread[53])
{
v5 = GetCurrentThreadId();
}
int nThreadID = (v5 != pRenderThread[51]) ? pRenderThread[10] : pRenderThread[11];
SViewport vp = GetMainRTViewport();
int32 v[4];
v[0] = vp.nX;
v[1] = vp.nY;
v[2] = vp.nWidth;
v[3] = vp.nHeight;
Matrix44 mIdent;
mIdent.SetIdentity();
Matrix44* pProjection = **(Matrix44***)((DWORD64)this + 0xEA0 + 0x318 * nThreadID);
Matrix44* pView = **(Matrix44***)((DWORD64)this + 0xE98 + 0x318 * nThreadID);
mathVec3Project(&vOut, &vIn, v, pProjection, pView, &mIdent);
vOut.x /= (this->GetWidth());
vOut.y /= (this->GetHeight());
}