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

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

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

2019-11-11 04:19:12
字體:
來源:轉載
供稿:網友

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

這個例子是用于射擊游戲,類似于噴子類型武器發射出多個子彈的彈道軌跡,是以瞄準方向以圓形半徑或者角度的幾個點,所以用了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 ; } }}

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 泰安市| 江阴市| 阳山县| 周至县| 二手房| 和硕县| 伊金霍洛旗| 德格县| 德清县| 旬阳县| 太白县| 高雄市| 墨江| 府谷县| 东兴市| 蓝田县| 长汀县| 阜城县| 昭通市| 浦城县| 元阳县| 岑溪市| 旬阳县| 平南县| 浦东新区| 福安市| 泽普县| 高青县| 黄陵县| 日喀则市| 西乌珠穆沁旗| 兰西县| 开化县| 河东区| 镇安县| 齐齐哈尔市| 宜良县| 简阳市| 正定县| 阿拉善左旗| 靖安县|