国产探花免费观看_亚洲丰满少妇自慰呻吟_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 ; } }}

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 莱西市| 平陆县| 枣强县| 合川市| 抚顺市| 昌乐县| 图木舒克市| 兴安县| 布尔津县| 英超| 栾城县| 扎赉特旗| 枝江市| 西峡县| 来凤县| 临湘市| 恭城| 东安县| 普兰县| 民县| 于田县| 咸丰县| 双流县| 阳原县| 公安县| 无为县| 荔波县| 西青区| 闽侯县| 黄石市| 韶关市| 黄浦区| 嘉定区| 江津市| 股票| 安福县| 翁牛特旗| 陆河县| 道真| 平塘县| 禹城市|