How can I check if one game object can see another?

前端 未结 3 2024
攒了一身酷
攒了一身酷 2021-02-15 00:24

I have an object, that is facing a particular direction with (for instance) a 45 degree field of view, and a limit view range. I have done all the initial checks (Quadtree node,

3条回答
  •  刺人心
    刺人心 (楼主)
    2021-02-15 00:49

    I've worked in the video game industry, and I can say that doing trig functions like arccos every frame is less than ideal. Instead, you precompute the cosine of the angle for the cone:

    float cos_angle = cos(PI/4); // 45 degrees, for example
    

    Then, each frame you can quickly check if a point falls inside that cone by comparing that with the dot product of the cone and the .

    vector test_point_vector = normalize(test_point_loc - cone_origin);
    float dot_product = dot(normalized_cone_vector, text_point_vector);
    bool inside_code = dot_product > cos_angle;
    

    There are no trig functions, just some multiplication, division, and addition. Most game engines have an optimized normalize() function for vectors.

    This works because of this equation:

    A · B = |A| * |B| * cos(Θ)
    

    If you normalize the vectors (A -> An), the equation is simplified:

    An · Bn = cos(Θ)
    

提交回复
热议问题