Untitled

 avatar
unknown
c_cpp
6 months ago
934 B
7
Indexable
bool world_to_screen(vec3_t world_location, vec2_t& out, vec3_t camera_pos, int screen_width, int screen_height, vec2_t fov, vec3_t matricies[3]) {
    auto local = world_location - camera_pos;
    auto trans = vec3_t{
        local.dot(matricies[1]),
        local.dot(matricies[2]),
        local.dot(matricies[0])
    };

    if (trans.z < 0.01f) {
        return false;
    }

    out.x = ((float)screen_width / 2.0) * (1.0 - (trans.x / fov.x / trans.z));
    out.y = ((float)screen_height / 2.0) * (1.0 - (trans.y / fov.y / trans.z));

    if (out.x < 1 || out.y < 1 || (out.x > sdk::ref_def.width) || (out.y > sdk::ref_def.height)) {
        return false;
    }

    return true;
}

bool w2s(vec3_t world_position, vec2_t& screen_position) {
    return world_to_screen(world_position, screen_position, get_camera_position(), ref_def.width, ref_def.height, ref_def.view.tan_half_fov, ref_def.view.axis);
}
Editor is loading...
Leave a Comment