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






  • 相关阅读:
    4章 关键的“构建”决策
    [转]EAGAIN、EWOULDBLOCK、EINTR与非阻塞 长连接
    5章 软件构建中的设计
    网站收集,慢慢积攒
    常见的SQL优化建议
    eclipse 最全快捷键 分享快乐与便捷
    设置Activity全屏和无标题
    Anaroid WebView详解大全
    cordova2.2对于CordovaWebView的配置
    在Android的webview中定制js的alert,confirm和prompt对话框的方法
  • 原文地址:https://www.cnblogs.com/Hichy/p/8575204.html
Copyright © 2011-2022 走看看