UGC编辑器开发-代码实现物体旋转操作轴

1.视频效果:

工程百度网盘链接:

链接:https://pan.baidu.com/s/1OYkt2T3Wv_Hh0Bt7nLyR-A 
提取码:1212

2.设计思路:

我们从鼠标点击的屏幕坐标打出一根射线,求出射线和旋转面的交点,交点减去原点,求出向量,再用Vector3.SignedAngle求出与第一次点击时初始向量的大小角度对比,最终获得当前帧的旋转分量。

3.关键代码:

    public void CalculateClickPos(){//屏幕坐标转世界curFrameRay = Camera.main.ScreenPointToRay(Input.mousePosition);curFramePos = CalculateRayPlaneIntersection(curFrameRay.origin, curFrameRay.origin-Camera.main.transform.position, transform.up, transform.position);dragVec = curFramePos - transform.position;curFrameAngle = Vector3.SignedAngle(transform.forward, dragVec,transform.up);}/// <summary>/// 求射线和平面的交点/// </summary>/// <param name="rayOrigin"></param>/// <param name="rayDirection"></param>/// <param name="planeNormal"></param>/// <param name="pointOnPlane"></param>/// <returns></returns>public Vector3 CalculateRayPlaneIntersection(Vector3 rayOrigin, Vector3 rayDirection, Vector3 planeNormal, Vector3 pointOnPlane){float dot = Vector3.Dot(planeNormal, rayDirection);// 确保射线不平行于平面if (Mathf.Abs(dot) > 0.0001f){// 计算射线和平面的交点参数float t = Vector3.Dot(pointOnPlane - rayOrigin, planeNormal) / dot;// 计算交点Vector3 intersectionPoint = rayOrigin + t * rayDirection;return intersectionPoint;}// 如果射线平行于平面,返回 Vector3.zero 表示没有交点return Vector3.zero;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/295745.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot+Vue的办公OA系统

开发环境 IDEA JDK1.8 MySQL8.0Node14.17.0 系统简介 本系统为前后端分离项目&#xff0c;主要拥有两个身份登录系统&#xff0c;管理员可以发布公告等信息&#xff0c;员工登录可以申请请假等信息&#xff0c;系统难度适中&#xff0c;适合学习研究使用&#xff0c;具体请…

使用Java语言解决古典猴子分桃问题

一、主要思想 五只猴子分桃 第一只猴子呀 平均分成五分 挤出来多一个 多的扔入海中 拿了其中一份 来了五只猴子 均是如此操作 第五只猴子呀 还存有多少只 二、基本代码 public class MonkeyPeach {public static void main(String[] args){int n 1;int m 0;int flag1;int…

非线性约束的优化问题_序列二次规划算法代码

1. 理论部分 2. 序列二次规划算法代码及解析 3.完整代码 1.理论部分 a.约束优化问题的极值条件 库恩塔克条件(Kuhn-Tucker conditions&#xff0c;KT条件)是确定某点为极值点的必要条件。如果所讨论的规划是凸规划&#xff0c;那么库恩-塔克条件也是充分条件。 &#xff…

小白入门之安装MAVEN

重生之我在大四学JAVA 第六章 安装MAVEN 打开IDEA&#xff0c;配置MAVEN 打开Setting 找到上面设置的settings.xml文件地址 至此MAVEN也就安装成功了 附赠一个maven清理脚本&#xff0c;如果发现你的电脑maven下载不了jar&#xff0c;依赖爆红&#xff0c;可以试下下面bat脚…

【Win10安装Qt6.3】安装教程_保姆级

前言 Windows系统安装Qt4及Qt5.12之前版本和安装Qt.12之后及Qt6方法是不同的 &#xff1b;因为之前的版本提供的有安装包&#xff0c;直接一路点击Next就Ok了。但Qt5.12版本之后&#xff0c;Qt公司就不再提供安装包了&#xff0c;不论是社区版&#xff0c;专业版等&#xff0c…

mysql索引合并index-merge

1.简单创建表并创建Index age sid CREATE TABLE st (id bigint(20) NOT NULL AUTO_INCREMENT,age int(11) DEFAULT NULL,name varchar(100) DEFAULT NULL,sid bigint(20) DEFAULT NULL,PRIMARY KEY (id),KEY idx_age (age),KEY idx_sid (sid) ) ENGINEInnoDB AUTO_INCREMENT8 …

图解LRU缓存

图解LRU缓存 OJ链接 介绍 LRU 缓存机制可以通过哈希表辅以双向链表实现&#xff0c;我们用一个哈希表和一个双向链表维护所有在缓存中的键值对。 双向链表按照被使用的顺序存储了这些键值对&#xff0c;靠近尾部的键值对是最近使用的&#xff0c;而靠近头部的键值对是最久未…

java SSM家庭财务管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM家庭财务管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代 码和数据库&#xff0c;系统主要采…

阅读笔记-A Cluster Separation Measure

A Cluster Separation Measure&#xff08;一种聚类分离测度&#xff09; 1.这篇论文要解决什么问题&#xff1f;要验证一个什么科学假设&#xff1f; 问题是确定数据中聚类的适当数量&#xff0c;解决这种问题的两种方法都取决于确定指数中相对较大的变化&#xff0c;而不是…

多模态大模型:关于Better Captions那些事儿

Overview 一、ShareGPT4V1.1、Motivation1.2、ShareGPT4V数据集构建1.3、ShareGPT4V-7B模型 一、ShareGPT4V 题目: ShareGPT4V: Improving Large Multi-Modal Models with Better Captions 机构&#xff1a;中科大&#xff0c;上海人工智能实验室 论文: https://arxiv.org/pdf…

Unity中获取时间戳、日期、时间、毫秒、秒以相互转换、自定义格式时间

Unity中获取时间戳、日期、时间、毫秒、秒以相互转换、自定义格式时间 介绍时间戳是什么什么时候用时间戳 获取时间获取当前时间获取时间戳日期转时间戳时间戳转日期将时间戳转换为多久之前星期自定义格式时间 总结 介绍 这里附带一个时间戳和时间转换的网址 时间戳是什么 时…

使用Ubuntu22+Minikube快速搭建K8S开发环境

安装Vmware 这一步&#xff0c;可以参考我的如下课程。 安装Ubuntu22 下载ISO镜像 这里我推荐从清华镜像源下载&#xff0c;速度会快非常多。 下载地址&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/22.04.3/ 如果你报名了我的这门视频课程&#xf…