zoukankan      html  css  js  c++  java
  • 检测物体是否在摄像机范围内

    // <summary>
    /// 对bound来说,它有8个点,当它的8个点同时处于摄像机裁剪块上方/下方/前方/后方/左方/右方,那么该bound不与摄像机可视范围交叉
    /// </summary>

    public static class Expand
    {
    public static bool CheckBoundIsInCamera(this Bounds bound, Camera camera)//检测物体是否在摄像机范围内
    {
    System.Func<Vector4, int> ComputeOutCode = (projectionPos) =>
    {
    int _code = 0;
    if (projectionPos.x < -projectionPos.w) _code |= 1;
    if (projectionPos.x > projectionPos.w) _code |= 2;
    if (projectionPos.y < -projectionPos.w) _code |= 4;
    if (projectionPos.y > projectionPos.w) _code |= 8;
    if (projectionPos.z < -projectionPos.w) _code |= 16;
    if (projectionPos.z > projectionPos.w) _code |= 32;
    return _code;
    };

    Vector4 worldPos = Vector4.one;
    int code = 63;
    for (int i = -1; i <= 1; i += 2)
    {
    for (int j = -1; j <= 1; j += 2)
    {
    for (int k = -1; k <= 1; k += 2)
    {
    worldPos.x = bound.center.x + i * bound.extents.x;
    worldPos.y = bound.center.y + j * bound.extents.y;
    worldPos.z = bound.center.z + k * bound.extents.z;

    code &= ComputeOutCode(camera.projectionMatrix * camera.worldToCameraMatrix * worldPos);
    }
    }
    }
    return code == 0 ? true : false;
    }
    }

  • 相关阅读:
    在dataGridView中实现批量删除
    VS2005制作简单的安装程序
    [WinForms]
    TreeView的联动复选框
    TreeView
    AcceptChanges()和RejectChanges()
    用C#在WINDOWS中实现新用户帐号的创建
    测试成功的窗体应用[批量新增、删除、保存]
    TreeView的递归读取
    VS2005中部署C#应用程序
  • 原文地址:https://www.cnblogs.com/DOGame/p/12346275.html
Copyright © 2011-2022 走看看