zoukankan      html  css  js  c++  java
  • StretchedBillboard 实现

    参考Unity粒子系统的StretchedBillboard,在保持模型的右朝向不变的情况下,尽量朝向摄像机
    转化为数学问题: 一个向量在一个面上的投影
    基础的Billboard的方向应为: 从中点指向摄像机
    限制的平面为以right为法向量的平面
    算法
    x
    24
     
    1
                Vector3 rightward = transform.parent.forward;
    2
                if (isShowLeft) rightward = -rightward;
    3
                Vector3 forward = (Camera.current.transform.position - transform.position).normalized;
    4
                if (isShowBack) forward = -forward;
    5
    6
                float cosVal = Vector3.Dot(rightward, forward);
    7
                if (Mathf.Abs(cosVal) >= 0.999999f) return;
    8
    9
                rightward = rightward * cosVal;
    10
                forward = forward - rightward;
    11
    12
                //不能用forward改变,不能保证right朝向 有时候会反过来
    13
                if (cosVal > 0)
    14
                    transform.rotation = Quaternion.LookRotation(forward, Vector3.Cross(rightward, forward));
    15
                else
    16
                    transform.rotation = Quaternion.LookRotation(forward, Vector3.Cross(forward, rightward));
    17
    18
                //角度旋转
    19
                if (billboardAngle != 0)
    20
                {
    21
                    Vector3 oriAngle = transform.eulerAngles;
    22
                    oriAngle.x += billboardAngle;
    23
                    transform.eulerAngles = oriAngle;
    24
                }
    效果: 白色为粒子系统的StretchedBillboard 红色为仿制的StretchedBillboard
     
    最终计算朝向






  • 相关阅读:
    忆2011年的秋天:一个人的项目
    横看成岭侧成峰,远近高低各不同——从面试官的角度谈面试
    使用Scratch进行少儿编程
    初识少儿编程
    升级openssl
    CentOS设置虚拟网卡做NAT方式和Bridge方式桥接
    iptables conntrack有什么用
    nohup和&的区别
    Linux就这个范儿 第12章 一个网络一个世界
    一个由INode节点爆满引起的业务故障
  • 原文地址:https://www.cnblogs.com/Hichy/p/8575204.html
Copyright © 2011-2022 走看看