国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

四元數在旋轉的運用-圓形煙火彈道軌跡

2019-11-11 02:51:54
字體:
來源:轉載
供稿:網友

向量和四元數經常混淆,四元數可以看做是一個向量+這個向量的旋轉,這樣容易理解。

這個例子是用于射擊游戲,類似于噴子類型武器發射出多個子彈的彈道軌跡,是以瞄準方向以圓形半徑或者角度的幾個點,所以用了Quaternion.AngleAxis函數來獲得這幾個軌跡感覺運算能簡便寫,有更好的算法的同學不妨留言探討學習下。

效果圖

using UnityEngine;using System.Collections;//圓形煙火彈道軌跡 add by thinbug.LPJ 2017.2.7public class CTestQu : MonoBehaviour { public Transform[] show; //幾個盒子,用來測試顯示彈道方向 public float angle = 5f; //擴散角度(圓形大小0-90f之間) void OnGUI() { string txt = string.Format("當前度數:{0:F},Tan:{1:F3}", angle,Mathf.Tan(Mathf.Deg2Rad * angle)); GUI.Label(new Rect(0, 0, 680, 50), txt); } void Update () { int i; Vector3 dir; int shuliang = show.Length; //顯示幾條邊的煙火特效 dir = transform.forward; //當前的瞄準方向 Vector3 at = transform.position; Debug.DrawRay(transform.position, dir*150f, Color.red); //紅色線表示當前方向 for ( i = 0; i < shuliang; i++) { //首先計算垂直于forward和right的 //1單位向量位置找其他發散點 Vector3 tempPointAt = at + dir; //旋轉Z方向獲得旋轉 Quaternion qtemp = Quaternion.AngleAxis(i / (float)shuliang * 360f, -transform.forward); //右方向是旋轉的擴散方向 Vector3 newdir = (qtemp * transform.right).normalized; //黃色線表示發散方向 Debug.DrawRay(tempPointAt, newdir, Color.yellow); //獲取到其他發散點 , 根據參數角度,計算發散長度 Vector3 tempPoint = tempPointAt + newdir * Mathf.Tan(Mathf.Deg2Rad * angle); //藍色顯示發散的向量 Debug.DrawLine(tempPointAt, tempPoint, Color.blue); //綠色顯示最終的圓形煙火彈道軌跡 Debug.DrawLine(at, tempPoint, Color.green); Vector3 newDir = tempPoint - at; //圓形煙火彈道軌跡 Quaternion q = Quaternion.LookRotation(newDir.normalized); show[i].rotation = q ; } }}

這里做下筆記用于后面旋轉參考。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 绍兴市| 鹤山市| 镇赉县| 兰州市| 崇仁县| 东辽县| 综艺| 新宁县| 汉川市| 桃园市| 莒南县| 芒康县| 霸州市| 抚宁县| 皮山县| 沅陵县| 清涧县| 三原县| 壤塘县| 南召县| 视频| 屏南县| 白沙| 仪陇县| 海门市| 凤凰县| 凤庆县| 凤阳县| 文昌市| 扶绥县| 巴彦淖尔市| 龙陵县| 双桥区| 威远县| 巴东县| 祁阳县| 桓仁| 台中市| 新丰县| 江北区| 沐川县|