http://www.360doc.com/content/16/0829/14/12282510_586760119.shtml

unity使用左手坐标系,另外在做旋转的时候必须弄清楚旋转坐标轴旋转顺序

一:edit中Transform组件

脚本重置:

transform.localEulerAngles = new Vector3(60,60,60);

绕父节点坐标轴旋转,旋转顺序z-x-y;

二:在脚本中使用Rotate()函数,参数为Space.Self

transform.Rotate(new Vector3(45,45,45),Space.Self);

绕本地坐标系坐标轴旋转,旋转顺序z-x-y;

注:每次使用Space.self进行rotate时,都是绕着调用时刻的坐标轴进行旋转的

三:在脚本中使用Rotate()函数,参数为Space.World

transform.Rotate(new Vector3(45,45,45),Space.World);

绕世界坐标系坐标轴旋转,旋转顺序z-x-y;

四:关于静态欧拉角和动态欧拉角

静态欧拉角,就是其旋转轴使用的是静止不动的参考系。

动态欧拉角,使用的是模型本身作为参考系,因而会随着模型的旋转而旋转。

因此,再看看前面的三种情况,使用Space.World旋转,以及 Editor 中的旋转,是静态欧拉角;使用Space.self,是动态欧拉角。

五:还原three的旋转

three使用右手坐标系,edit中,根对象绕本地坐标系坐标轴旋转,旋转顺序x-y-z;

子对象绕父对象的坐标轴旋转,旋转顺序x-y-z;(即除根对象外,其他全部绕父对象的坐标轴旋转)

(此处是个坑,当初真是too young too simple,最开始以为旋转坐标轴都是本地坐标轴。。。)

旋转在unity中的还原最直观方法(只适用于root):

gameObject.transform.Rotate(new Vector3(matrixParse.GetAngles.x,0,0),Space.Self);
gameObject.transform.Rotate(new Vector3(0,matrixParse.GetAngles.y,0),Space.Self);
gameObject.transform.Rotate(new Vector3(0,0,matrixParse.GetAngles.z),Space.Self);

非root:

transform.localEulerAngles = matrixParse.GetAngles;//这样写讲道理是有问题的,没考虑旋转顺序.

找到解决办法:

Vector3 ang = matrixParse.GetAngles;
gameObject.transform.localRotation = Quaternion.AngleAxis(ang.x,                                       Vector3.right)
* Quaternion.AngleAxis(ang.y,                                       Vector3.up)
* Quaternion.AngleAxis(ang.z,                                       Vector3.forward);

始终遵循的原则:旋转顺序和旋转方式与three统一。

特殊化,平面和摄像机初始时与three存在差异,采用进一步旋转进行补偿:

transform.Rotate(new Vector3(90,0,0),Space.Self);//平面
transform.Rotate(0,180,0),Space.Self);//摄像机

六:左右反转

由于左右手坐标系的差异,导致unity中看到的场景与three相比左右颠倒。

解决办法:

1.缩放无效的模型,例如摄像机

//反转
Vector3 pos = transform.position;
transform.position = new Vector3(-pos.x,pos.y,pos.z);
Vector3 angs = transform.eulerAngles;
gameObject.transform.Rotate(new Vector3(0,-2 * angs.y,0),Space.World);

2.可以调整缩放的模型

//反转
Vector3 pos = transform.position;
transform.position = new Vector3(-pos.x,pos.y,pos.z); Vector3 scale = transform.localScale;
transform.localScale = new Vector3(-scale.x,-scale.y,-scale.z); transform.Rotate(new Vector3(180,0,0),Space.World);

其中缩放可根据显示需要调整正负。

												

unity还原three之旋转的更多相关文章

  1. unity还原three导出的json——基本模型,位移,旋转,缩放

    GameObject.CreatePrimitive(PrimitiveType.Cube); GameObject.CreatePrimitive(PrimitiveType.Plane); Gam ...

  2. maya和Unity中的坐标系旋转

    maya软件是用的右手坐标系,默认旋转顺序是ZYX,即先绕Z轴旋转,再绕Y轴旋转,最后绕X轴旋转. 比如在maya软件中,右侧的旋转顺序是可选的,默认的选择是“XYZ”,其实物体旋转顺序是倒着念,即上 ...

  3. Unity摄像机围绕物体旋转两种实现方式

    第一种,使用Transform 函数 RotateAround. 代码如下: public Transform target;//获取旋转目标 private void camerarotate() ...

  4. unity鼠标拖动物体旋转

    using System.Collections; using System.Collections.Generic; using UnityEngine; /// <summary> / ...

  5. unity还原three——顶点,三角面,uv

    public class Geometry { public Geometry(string name, Data data, Hashtable hash) { Debug.Log("解析 ...

  6. Unity 相机平移、旋转、缩放

    内容不多,一个脚本,直接上代码 using System.Collections; using System.Collections.Generic; using UnityEngine; publi ...

  7. unity之让obj旋转自转等操作

    1.让cube沿着矩形四个点运动 using System.Collections; using System.Collections.Generic; using UnityEngine; publ ...

  8. 实现Unity编辑器模式下的旋转

    最近在做一个模型展示的项目,我的想法是根据滑动屏幕的x方向差值和Y方向的差值,来根据世界坐标下的X轴和Y轴进行旋转,但是实习时候总是有一些卡顿.在观察unity编辑器下的旋转之后,发现编辑器下的旋转非 ...

  9. 【Unity技巧】四元数(Quaternion)和旋转

    四元数介绍 旋转,应该是三种坐标变换--缩放.旋转和平移,中最复杂的一种了.大家应该都听过,有一种旋转的表示方法叫四元数.按照我们的习惯,我们更加熟悉的是另外两种旋转的表示方法--矩阵旋转和欧拉旋转. ...

随机推荐

  1. 爱码室Crawler & classification module项目工作分配

    项目情况 爬虫项目是上届学生遗留下来的项目,他们已经实现了基础的功能,而我们来负责完善,主要需要解决的问题是怎么让爬虫脱离爬和停的繁琐指令,更加的智能化.所以我们的计划是在前人的源码基础上,加以修改测 ...

  2. java 实验一

       步骤 耗时h 百分比% 需求分析 0.3h 7.5 设计 2.5h 62.5 代码实现 0.5h 12.5 测试 0,2h 5 分析总结 0.5h 12.5 实验一 截图 实验二: 实验三 实现 ...

  3. EDK_II环境搭建与测试

    一. 环境准备 Windows 10 (64位)专业版 Visual Studio 2010旗舰版(默认路径安装) Mscrosoft SDKs 7.0A BIOS综合包里的EDK开发环境 二. 实验 ...

  4. Task 6.2冲刺会议九 /2015-5-22

    今天把之前的跳转问题加以改正并加以优化.遇到的主要问题是跳转的时后时间有点长,以为没有成功.之后查资料说是端口没有及时释放,导致了程序的滞缓.明天要继续把程序的界面进行优化.

  5. B3

    吴晓晖(组长) 过去两天完成了哪些任务 一些细节的debug,部分优化,算法中有关记录的部分 展示GitHub当日代码/文档签入记录 接下来的计划 推荐算法 还剩下哪些任务 组员:刘帅珍 过去两天完成 ...

  6. B2

    组员1:吴晓晖(组长) 过去两天完成了哪些任务 代码重构基本完成 展示GitHub当日代码/文档签入记录 接下来的计划 推荐算法 还剩下哪些任务 组员2:陈锦谋 过去两天完成了哪些任务 重新制作图标 ...

  7. linux_添加定时任务,每5min清理下某个文件夹下的文件

    性能测试的过程中会生成大量的日志文件,导致无法继续进行,linux可以增加一个定时任务,进行定时清理 1. 先编写一个sh脚本,该sh脚本用于文件夹文件清理,脚本编写完成后拷贝到服务器上,且授予权限 ...

  8. mongodb 下载安装 转

    MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的.他支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型.M ...

  9. notepad++ 安装go插件

    1. 想学习go语言 使用notepad++ 但是发现无法安装 gonpp的插件 花了很长时间. 发现问题为: 前几天将notepad++ 升级到了 7.6 的版本 然后使用 plugin manag ...

  10. Java容器深入浅出之Map、HashMap、Hashtable及其它实现类

    在Java中,Set的底层事实上是基于Map实现的,Map内部封装了一个Entry内部接口,由实现类来封装key-value对,当value值均为null时,key的集合就形成了Set.因此,Map集 ...