2022-09-26【Math】计算朝向之间的分解夹角

    private void CalculateLockAngleInternal(Vector3 targetPos, Vector3 myPos, Vector3 myForward,
        out Fix64 yawAngleDif, out Fix64 pitchAngleDif)
    {
        // 计算水平角度差值
        // 角色正朝向
        Vector3 targetYawDirection = targetPos - myPos;
        targetYawDirection.Y = 0;

        var fwd = new Vector3(myForward.X, 0, myForward.Z);
        yawAngleDif = BEPhyHelper.Angle(fwd, targetYawDirection);
        // 目标在角色左侧,需要向左转
        if (Vector3.Cross(fwd, targetYawDirection).Y < 0)
        {
            yawAngleDif *= -1;
        }

        // 计算竖直角度差值
        myForward = BEPhyHelper.TransformDirection(myForward, BEPhyHelper.Euler(0, yawAngleDif, 0));

        Vector3 virtualEyePos = m_Cm.CameraAnchor.PosLogic; //模拟的眼睛位置,根据眼睛位置,计算目标pitch值   todo:不要依赖相机位置,依赖自身位置和相机偏差量做计算

        Vector3 targetPitchDirection = targetPos - virtualEyePos;
        Fix64 targetPitch = BEPhyHelper.Angle(myForward, targetPitchDirection);

        // 目标在角色上方
        if (Vector3.Cross(myForward, Vector3.Cross(myForward, targetPitchDirection)).Y < 0)
        {
            targetPitch *= -1;
        }

        // 限制最大最小角度
        //targetPitch = BEPhyHelper.ClampAngle(targetPitch, cc.input.cameraRotate.MinPitchLimit, cc.input.cameraRotate.MaxPitchLimit);

        pitchAngleDif = cc.input.cameraRotate.Pitch - targetPitch;
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这部分主要讲述的是农作物的自然授粉方式和杂交育种的授粉方式以及人工体外授粉方式 农作物在自然情况下主要依靠风媒、虫...
    一点小利阅读 528评论 0 1
  • 在赌一个未来,没想到桌子被掀翻 赌桌上的两个人一个灵魂游离了 她说回去住两天,内心存在的不舒服没有说出口 当说出还...
    不爱妇女的同志阅读 76评论 0 1
  • 今日内容: 0052.《雍也篇》山川其舍诸:是金子总会发光的 0053.《雍也篇》贤哉回也:快乐是一种奇妙...
    重启出发阅读 135评论 0 0
  • 民国巩县志载“赵公行状“之文 题目排版异议 新版民国《巩县志》卷二十三《文...
    338c373f45e9阅读 646评论 0 0
  • 竹荪(学名:Dictyophora indusiata(Vent.ex Pers) Fisch)是鬼笔科竹荪属真菌...
    銘靄阅读 78评论 0 0