原文链接1:https://www.cnblogs.com/wantnon/p/4570188.html

原文链接2:https://www.cnblogs.com/hefee/p/3820610.html

在unity里 相机空间 与 相机gameObject的局部空间 不重合。

Camera.worldToCameraMatrix的文档中有这样一句话:

Note that camera space matches OpenGL convention: camera's forward is the negative Z axis. This is different from Unity's convention, where forward is the positive Z axis.

意思是说unity中相机gameObject的蓝轴是相机空间的-Z。

为了确认,做了如下实验:

如图,立方体的坐标是(0,0,0),相机的坐标是(0,0,-3),我们要计算并输出立方体在相机空间的坐标。

做法是为立方体添加如下脚本:

using UnityEngine;
using System.Collections;
public class printPosInCameraSpace : MonoBehaviour {
    public GameObject m_cameraRef;
    // Use this for initialization
    void Start () {
        Matrix4x4 worldToCameraMat = m_cameraRef.GetComponent<Camera>().worldToCameraMatrix;
        Vector3 thisPosInWorld = transform.position;
        Vector3 thisPosInCamera = worldToCameraMat.MultiplyPoint (thisPosInWorld);
        Debug.Log (thisPosInCamera);
    }
}

并在编辑器中将camera赋给m_cameraRef.

然后运行脚本,得到输出结果为:(0,0,-3)。

这说明相机gameObject的蓝轴确实是相机空间-Z轴。

进一步实验:

将脚本改为:

using UnityEngine;
using System.Collections;
public class printPosInCameraGameObjectLocalSpace : MonoBehaviour {
    public GameObject m_cameraRef;
    // Use this for initialization
    void Start () {
        Matrix4x4 worldToCameraMat = m_cameraRef.transform.worldToLocalMatrix;
        Vector3 thisPosInWorld = transform.position;
        Vector3 thisPosInCamera = worldToCameraMat.MultiplyPoint (thisPosInWorld);
        Debug.Log (thisPosInCamera);
    }
}

输出结果为:(0,0,3)。

--结论:

相机空间 和 相机gameObject的局部空间 是不重合的。图中这三个坐标轴表示的是 相机gameObject的局部空间。 而 相机空间 则Z轴方向与之相反。

Camera.worldToCameraMatrix是 世界空间to相机空间 矩阵。Camera.transform.worldToLocalMatrix是 世界空间to相机gameObject的局部空间 矩阵,两个矩阵是不一样的。

————————————————————————————————————————————————————————————

透视投影


OpenGL透视视锥体与NDC

在透视投影中,截棱锥体(观察坐标)中的3D点会被映射到立方体(NDC)中。x坐标的范围从[l,f]到[-1,1],y坐标的范围从[b,t]到[-1,1],z坐标的范围从[n,f]到[-1,1]。

注意,观察坐标为右手坐标系,NDC使用左右坐标系。也就是说,位于原点的照相机在观察坐标中看向-Z轴,而在NDC中看向+Z轴。因为glFrustum()只接收正的近平面与远平面距离值,我们需要在构建GL_PROJECTION矩阵时对他们取反。

【转】UNITY中相机空间,投影空间的正向问题相关推荐

  1. Unity中相机跟随人物移动

    方法1:将相机拖到人物的游戏对象上,也就是让相机成为角色的子物体,这样相机就会跟随角色移动 但是这样会存在问题,1.相机会随着人物的翻转而翻转,2.相机跟随人物没有缓冲效果,移动比较僵硬 方法2:代码 ...

  2. 浅谈unity中gamma空间和线性空间

    转载请标明出处:http://www.cnblogs.com/zblade/ 一.概述 很久没有写文章了,今天写一篇对gamma空间和线性空间的个人理解总结,在查阅和学习了各个资料后,算是一个个人笔记 ...

  3. 关于相机坐标到投影空间坐标转换的理解

    在记录此文前看过许多3D介绍的书籍,却总未能理解相机坐标至空间坐标转换的情况,网上搜索亦五花八门,多是文章转载,时而见文式有误亦未有异议,尚未知其人是否曾读此文章.因而自己推导与想像,总算能观其义.故 ...

  4. 【Unity-学习-013】EasyAR4.0稀疏空间地图 在Unity中编辑扫描的场景

    之前遇到一个实验性的项目,用空间地图做场景识别,然后和游客互动拍照的需求.第一感觉就想到了 EasyAR4.0主推的空间地图功能.对于EasyAR的详细信息,请直接移步官网.那里有详细的介绍和简单的入 ...

  5. 渲染管线中几种基础的坐标空间(对象空间、世界空间、相机空间(观察空间)、NDC空间、裁剪空间、屏幕空间)

    对象空间 每个模型都有一个其本身的坐标系,比如以它的几何中心为这个空间的坐标原点,这个模型所有顶点的位置属性都是相对于这个原点的坐标值.因此我们称这个空间为 对象空间 (局部空间) 世界空间 我们要把 ...

  6. unity3D中的伽马空间和线性空间

    https://zhuanlan.zhihu.com/p/66558476 https://zhuanlan.zhihu.com/p/88317263 https://zhuanlan.zhihu.c ...

  7. 采用空间投影的深度图像点云分割

    本文摘自于:郭清达,全燕鸣. 采用空间投影的深度图像点云分割[J]. 光学学报, 2020, 40(18): 1815001 编辑:新机器视觉 点云分割是点云处理的一个关键环节,其分割质量决定了目标测 ...

  8. 脑电分析系列[MNE-Python-10]| 信号空间投影SSP数学原理

    projector(投影)和投影背景 projector(投影)(简称proj),也称为信号空间投影(SSP),定义了应用于空间上的EEG或MEG数据的线性操作. 可以将该操作看做是一个矩阵乘法,通过 ...

  9. Python-EEG工具库MNE中文教程(10)-信号空间投影SSP数学原理

    目录 projector(投影)和投影背景 案例解释投影原理 导入工具库 什么是projector(投影)? 计算正交平面 使用SVD计算投影矩阵 本分享为脑机学习者Rose整理发表于公众号:脑机接口 ...

最新文章

  1. 白鸦三次创业反思:公司遇问题 怎么走都对(转)
  2. 1779: 无法言表(map+queue)
  3. js reduce实现中间件_js数组高阶方法reduce经典用法代码分享
  4. i4助手linux,爱思i4助手刷机教程
  5. 测试显卡风扇的软件,让噪音远离,显卡风扇转速调节
  6. HDR图像渲染滤镜软件:Topaz Adjust AI for mac
  7. 计算广告第四章——合约广告
  8. 三种近场通信技术的特点
  9. 外盘期货分仓软件(如智星系统,信管家)等功能
  10. Windows上安装mysql-8.0.29-winx64
  11. 布莱克斯科尔斯模型(三)热传导方程的解析解
  12. c语言使用time函数计时,C语言中的计时方法:time
  13. 百科:天然药物化学家--曾广方
  14. 10分钟部署一个别人可以访问的在线网站
  15. 中国高校十大热门BBS
  16. 使用wxauto出现ImportError: DLL load failed while importing win32gui: 找不到指定的程序报错的解决方案
  17. 在桌面上显示IP地址等信息
  18. 观点丨非洲区块链概览
  19. 新版二开彩虹易支付整站源码批发 全开源全解密去后门 亲测一点问题没有
  20. Sigrity仿真之POWER DC操作步骤

热门文章

  1. Java中善用通用的枚举对象类实现代码业务的判断
  2. Angular中路由的嵌套-父子路由
  3. Android中使用AlertDialog实现几种不同的对话框
  4. C#中提示:System.Runtime.Serialization.SerializationException
  5. 赶紧下载SublimeText并快速设置代码自动补全,效率大大提高
  6. Vue的表单组件之单选按钮
  7. Java反射,从0开始
  8. 集成学习(ensemble learning)(一)
  9. winform 转 JAVA_C#转java
  10. 串口接收标志位语句_如何获取串口的发送和接收的标志位?