Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bool ScreenTransform(const Vector &point, Vector &screen)
- float w;
- const VMatrix &worldToScreen = I::EngineClient->WorldToScreenMatrix();
- screen.x = worldToScreen[0][0] * point[0] + worldToScreen[0][1] * point[1] + worldToScreen[0][2] * point[2] + worldToScreen[0][3];
- screen.y = worldToScreen[1][0] * point[0] + worldToScreen[1][1] * point[1] + worldToScreen[1][2] * point[2] + worldToScreen[1][3];
- w = worldToScreen[3][0] * point[0] + worldToScreen[3][1] * point[1] + worldToScreen[3][2] * point[2] + worldToScreen[3][3];
- screen.z = 0.0f;
- bool behind = false;
- if (w < 0.001f) {
- behind = true;
- screen.x *= 100000;
- screen.y *= 100000;
- }
- else {
- behind = false;
- float invw = 1.0f / w;
- screen.x *= invw;
- screen.y *= invw;
- }
- return behind;
- }
- bool WorldToScreen(const Vector &origin, Vector &screen) {
- if (!ScreenTransform(origin, screen)) {
- int ScreenWidth, ScreenHeight;
- I::EngineClient->GetScreenSize(ScreenWidth, ScreenHeight);
- float x = ScreenWidth / 2;
- float y = ScreenHeight / 2;
- x += 0.5 * screen.x * ScreenWidth + 0.5;
- y -= 0.5 * screen.y * ScreenHeight + 0.5;
- screen.x = x;
- screen.y = y;
- return true;
- }
- return false;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement