Unity 之Vector3的球形插值Slerp详解
首先上官方的文档信息,方面还没有看过的同学学习。
通过t数值在from和to之间插值。返回的向量的长度将被插值到from到to的长度之间。
//在日出和日落之间动画弧线
usingUnityEngine;
usingSystem.Collections;publicclass example : MonoBehaviour
{publicTransform sunrise;publicTransform sunset;voidUpdate() {//弧线的中心Vector3 center = sunrise.position + sunset.position * 0.5f;//向下移动中心,垂直于弧线center -= newVector3(0, 1, 0);//相对于中心在弧线上插值Vector3 riseRelCenter = sunrise.position - center;Vector3 setRelCenter = sunset.position - center;transform.position = Vector3.Slerp(riseRelCenter,setRelCenter, Time.time);transform.position += center;}
}
下面进入对这个函数的详细解释。
首先定义两个向量 a(2,1,0); b(-2,1,0); 然后咱们以这两个坐标点和原点来构建一个三角形,如下图所示:
for(inti = 1; i < 10; ++i){Vector3 drawVec = Vector3.Slerp(a, b, 0.1f * i);Debug.DrawLine(Vector3.zero, drawVec, Color.yellow);}
//弧线的中心Vector3 center = (a + b) * 0.5f;//我们把中心点向下移动中心,垂直于弧线center -= newVector3(0, 0.5f, 0);// 求出新的中心点到向量a和向量b的Vector3 vecA = a - center;Vector3 vecB = b - center;for(inti = 0; i <= 10; ++i){Vector3 drawVec = Vector3.Slerp(vecA, vecB, 0.1f * i);Debug.DrawLine(center, drawVec, Color.yellow);}
drawVec += center;
Vector3 centorProject = Vector3.Project(centor, mStart - mEnd); // 中心点在两点之间的投影centor = Vector3.MoveTowards(centor, centorProject, 1f); // 沿着投影方向移动移动距离(距离越大弧度越小)
//在日出和日落之间动画弧线
usingUnityEngine;
usingSystem.Collections;publicclass example : MonoBehaviour
{publicTransform sunrise;publicTransform sunset;voidUpdate() {//弧线的中心Vector3 center = sunrise.position + sunset.position * 0.5f;Vector3 centorProject = Vector3.Project(centor, sunrise.position - sunset.position); // 中心点在两点之间的投影centor = Vector3.MoveTowards(centor, centorProject, 1f); // 沿着投影方向移动移动距离(距离越大弧度越小) //相对于中心在弧线上插值Vector3 riseRelCenter = sunrise.position - center;Vector3 setRelCenter = sunset.position - center;transform.position = Vector3.Slerp(riseRelCenter, setRelCenter, Time.time);transform.position += center;}
}
// 沿着投影方向移动移动距离(距离越大弧度越小)
centor = Vector3.MoveTowards(centor, centorProject, 1f);
privateVector3 mStart = newVector3(2, 4, -1);privateVector3 mEnd = newVector3(-1, 1, 2);// Update is called once per frameprivatevoid Update(){Debug.DrawLine(newVector3(-100, 0, 0), newVector3(100, 0, 0), Color.green);Debug.DrawLine(newVector3(0, -100, 0), newVector3(0, 100, 0), Color.green);Debug.DrawLine(Vector3.zero, mStart, Color.red);Debug.DrawLine(Vector3.zero, mEnd, Color.red);Debug.DrawLine(mStart, mEnd, Color.red);Vector3 centor = (mStart + mEnd) * 0.5f;Vector3 centorProject = Vector3.Project(centor, mStart - mEnd); // 中心点在两点之间的投影centor = Vector3.MoveTowards(centor, centorProject, 1f); // 沿着投影方向移动移动距离(距离越大弧度越小)Debug.DrawLine(centor, mStart, Color.blue);Debug.DrawLine(centor, mEnd, Color.blue);Debug.Log(string.Format("{0} : {1}", Vector3.Distance(centor, mStart), Vector3.Distance(centor, mEnd)));for(inti = 1; i < 10; ++i){Vector3 drawVec = Vector3.Slerp(mEnd - centor, mStart - centor, 0.1f * i);drawVec += centor;Debug.DrawLine(centor, drawVec, 5 == i ? Color.blue : Color.yellow);}}
Unity 之Vector3的球形插值Slerp详解相关推荐
- pandas dataframe缺失值(np.nan)处理:识别缺失情况、删除、0值填补、均值填补、中位数填补、加缺失标签、插值填充详解及实例
pandas dataframe缺失值(np.nan)处理:识别缺失情况.删除.0值填补.均值填补.中位数填补.加缺失标签.插值填充详解及实例 isnull().natna().isna().fill ...
- 数学建模——一维、二维插值模型详解Python代码
数学建模--一维.二维插值模型详解Python代码 一.一维插值 # -*-coding:utf-8 -*- import numpy as np from scipy import interpol ...
- Unity 之 打包参数 -- Player面板属性详解
Unity 之 Project Setting -- Player 面板属性详解 前言 一,Player 1.1 属性说明 1.2 效果展示 二,ICON(图标) 2.1 属性说明 2.2 使用示例 ...
- Unity Shader中各部分定义内容详解
Unity Shader中各部分定义内容详解 样板 Shader "Practice/Unlit/SimpleUnlit" {Properties{_MainTex (" ...
- Unity快速入门之二 GUI Transform 详解
Unity快速入门之一 3D基础概念.Camera.Canvas RenderMode的几种方式对比_翕翕堂 Unity快速入门之二 GUI Transform 详解_翕翕堂 Unity快速入门之三 ...
- Unity 之 UGUI RectTransform矩形变换组件详解
Unity 之 UGUI RectTransform矩形变换组件详解 1,属性面板 2,详细信息 3,代码操作 4,使用实例 4.1 传说中的自适应 4.2 锚点的另一种使用方式: 4.3 蓝图和原始 ...
- 【20220207】【信号处理】三次样条插值原理详解
方程组的求解本文不做介绍. 一.三次样条插值 1. 定义 三次样条插值(Cublic Spline Interpolation),简称 Spline 插值,是通过一系列样本点的光滑曲线,数学上通过求解 ...
- Unity文件、文件引用、Meta详解
原文链接:https://blog.uwa4d.com/archives/USparkle_inf_UnityEngine.html 这是侑虎科技第381篇原创文章,感谢作者陈广忠供稿.欢迎转发分享, ...
- [新手必备]Unity推箱子小游戏C#代码详解(第一篇-代码部分)
完整项目请参考博客:https://blog.csdn.net/qq_41676090/article/details/96300302 本文为推箱子小游戏C#代码详解第一篇的代码部分,主要讲解 Sy ...
最新文章
- 手动配置lnmp环境
- Python深度学习:基于PyTorch [Deep Learning with Python and PyTorch]
- 获取多张表中的数据_趣说:什么是数据结构和算法
- android dimensions.xml,android – Value等于match_parent或fill_parent在dimensions.xml?
- java模块_Java 9 揭秘(2. 模块化系统)
- fcc无线充电认证_FCC规定了无线路由器固件,轮椅和胰岛素的开放状态以及更多新闻
- kafka java_Java操作Kafka
- geetest文件夹什么意思_手机文件夹是英文不敢删?只要找出这5个文件夹,能腾出大量内存...
- bzoj1113[Poi2008]海报PLA
- [导入]Nebula3学习笔记(5): IO系统
- 478.在圆内随机生成点
- 下载小红书无水印照片
- 档案管理制度计算机管理制度,计算机管理档案制度
- 优秀IT顾问的七大能力之一--专业技术能力
- 车牌识别一体机 尊贵
- VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-S CALE IMAGE RECOGNITION-论文笔记
- 大型电商平台设计实例:电商平台总体设计和业务模型设计
- 【获奖案例巡展】信创先锋之星——云上贵州信创工程中心大数据中台
- ChatGPT与文心一言对比思考
- Android调用聚 合 API
热门文章
- 面试官:对于 JavaScript 的加载问题你怎杨理解?
- 乐观锁和悲观锁的理解及如何实现,乐观锁的实现方式。看完你就明白了!
- 新兴元宇宙META PANDA——IDO抢购倒计时
- 蓝桥杯STM32F103RB通用定时器(一)定时功能
- “西游记之大圣归来”关键词提取-textrank
- 生信分析,通过ensemblID检索对应protein序列
- Centos7.4升级内核为5.1 亲测可用
- 华为的鸿蒙系统都有哪些手机,曝鸿蒙系统首批升级名单,华为中高端系列都有,荣耀还要等等?...
- 使用腾讯云存储桶(COS)托管静态网站
- 【EI/Scopus双检索】国内多所高校协办,计算机多主题征稿,AHPCAI 2021诚邀您投稿参会!...