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
     
    最终计算朝向






  • 相关阅读:
    Kubernets 第一讲 初探
    docker 运行nginx并进入容器内部、端口映射
    Docker 国内镜像的配置及使用
    Centos7上安装docker
    富文本编辑器--FCKEditor 上传图片
    在centos7上安装elasticSearch
    Centos7上卸载openJdk安装,安装自己的JDK1.8
    fastdfs 上传图片 完整版
    nginx 启动报错 “/var/run/nginx/nginx.pid" failed” 解决方法
    nginx + fastdfs 的开机自启动
  • 原文地址:https://www.cnblogs.com/Hichy/p/8575204.html
Copyright © 2011-2022 走看看