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

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

四元數(shù)在旋轉(zhuǎn)的運用-圓形煙火彈道軌跡

2019-11-11 02:20:59
字體:
供稿:網(wǎng)友

向量和四元數(shù)經(jīng)常混淆,四元數(shù)可以看做是一個向量+這個向量的旋轉(zhuǎn),這樣容易理解。

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

效果圖

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("當前度數(shù):{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單位向量位置找其他發(fā)散點 Vector3 tempPointAt = at + dir; //旋轉(zhuǎn)Z方向獲得旋轉(zhuǎn) Quaternion qtemp = Quaternion.AngleAxis(i / (float)shuliang * 360f, -transform.forward); //右方向是旋轉(zhuǎn)的擴散方向 Vector3 newdir = (qtemp * transform.right).normalized; //黃色線表示發(fā)散方向 Debug.DrawRay(tempPointAt, newdir, Color.yellow); //獲取到其他發(fā)散點 , 根據(jù)參數(shù)角度,計算發(fā)散長度 Vector3 tempPoint = tempPointAt + newdir * Mathf.Tan(Mathf.Deg2Rad * angle); //藍色顯示發(fā)散的向量 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 ; } }}

這里做下筆記用于后面旋轉(zhuǎn)參考。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 民权县| 东乌| 深水埗区| 金门县| 和政县| 大同市| 怀柔区| 来凤县| 玉门市| 托里县| 福海县| 武定县| 介休市| 承德市| 隆化县| 扶风县| 柘城县| 南涧| 汝阳县| 海原县| 孝义市| 安福县| 盐亭县| 崇明县| 汝南县| 克拉玛依市| 墨玉县| 道真| 乌拉特中旗| 汝南县| 开平市| 辽源市| 怀安县| 鞍山市| 蓝田县| 高唐县| 姜堰市| 兰西县| 沁阳市| 杂多县| 裕民县|