unity, 相机空间 与 相机gameObject的局部空间

在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的局部空间 矩阵,两个矩阵是不一样的。

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

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

相关文章

Winform实现漂亮动画-小火车

一、起因 最近在做一个Winform的项目&#xff0c;其中需要一些加载动画&#xff0c;所以就搜索了一下找些思路&#xff0c;以下链接是本文的参考。 参考&#xff1a;Jeremie Martinez &#xff08;译文链接&#xff09; 注&#xff1a;原文中并没有给出图片资源&#xff0c;图…

julia在mac环境变量_在Julia中确定值/变量的类型

julia在mac环境变量To determine the type of value, variable – we use typeof() function, it accepts a value or a variable or a data type itself and returns the concrete type of the given parameter. 要确定值的类型&#xff0c;变量 –我们使用typeof()函数 &…

synchronized 加锁 this 和 class 的区别!

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;synchronized 是 Java 语言中处理并发问题的一种常用手段&#xff0c;它也被我们亲切的称之为“Java 内置锁”&#xff0c;由…

不懂技术的人请不要对懂技术的人说这很容易

“这个网站相当简单&#xff0c;所有你需要做的就是完成X&#xff0c;Y&#xff0c;Z。你看起来应该是技术很好&#xff0c;所以&#xff0c;我相信&#xff0c;你不需要花费太多时间就能把它搭建起来。”我时不时的就会收到这样的Email。写这些邮件的人几乎都是跟技术不沾边的…

C# WinForm窗体四周阴影效果

一、起因 关于winform窗体无边框的问题很简单&#xff0c;只需要设置winform的窗体属性即可&#xff1a; FormBorderStyle FormBorderStyle.None; 但是这中无边框窗口实现的效果和背景完全没有层次的感觉&#xff0c;所以能加上阴影&#xff0c;突出窗口显示的感觉。 二、…

循环语句与条件语句_在PHP中混合条件语句和循环

循环语句与条件语句As mentioned earlier, the looping statement is executing a particular code as long as a condition is true. On the order hand, conditional statements are statements that can only be executed based on the fulfillment of a particular conditi…

synchronized 优化手段之锁膨胀机制!

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;synchronized 在 JDK 1.5 之前性能是比较低的&#xff0c;在那时我们通常会选择使用 Lock 来替代 synchronized。然而这个情…

Mac下显示隐藏文件

苹果Mac OS X操作系统下&#xff0c;隐藏文件是否显示有很多种设置方法&#xff0c;最简单的要算在Mac终端输入命令。显示/隐藏Mac隐藏文件命令如下(注意其中的空格并且区分大小写)&#xff1a; 显示Mac隐藏文件的命令&#xff1a; defaults write com.apple.finder AppleShowA…

NTFS USN的Create和工具代码汇总

1、 因为之前把相关代码放在了GitHub上&#xff0c;后来突然有人帮忙改了些个BUG&#xff0c;非常感谢 760193107&#xff0c;所以就写了个完整点的例子&#xff0c;希望对别人有所帮助。 GitHub项目地址 2、错误码&#xff1a;ERROR_JOURNAL_NOT_ACTIVE 在测试时&#xff…

在Java中,负数的绝对值不一定是正数!

作者 l Hollis来源 l Hollis&#xff08;ID&#xff1a;hollischuang&#xff09;绝对值是指一个数在数轴上所对应点到原点的距离&#xff0c;所以&#xff0c;在数学领域&#xff0c;正数的绝对值是这个数本身&#xff0c;负数的绝对值应该是他的相反数。这几乎是每个人都知道…

c语言交换两个数字 位运算_交换两个8位数字| 8086微处理器

c语言交换两个数字 位运算Problem statement: 问题陈述&#xff1a; To swap two 8 bits numbers using third register on 8086 microprocessor. 使用8086微处理器上的第三个寄存器交换两个8位数字。 Algorithm: 算法&#xff1a; Load first number in register AL throug…

自己写着玩(二)

转载于:https://www.cnblogs.com/wangmengmeng/p/4572611.html

C#阻止计算机关闭显示器和待机

一、测试 测试环境&#xff1a;Win10 备注&#xff1a; 1、管理员和非管理员权限测试都正常&#xff1b; 2、执行阻止关闭显示器和待机后&#xff0c;退出程序会自动恢复&#xff1b; 3、使用WinL切换到锁屏界面时&#xff0c;同样生效&#xff1b; 二、代码 代码来源&a…

实战:隐藏SpringBoot中的私密数据!

这几天公司在排查内部数据账号泄漏&#xff0c;原因是发现某些实习生小可爱居然连带着账号、密码将源码私传到GitHub上&#xff0c;导致核心数据外漏&#xff0c;孩子还是没挨过社会毒打&#xff0c;这种事的后果可大可小。说起这个我是比较有感触的&#xff0c;之前我TM被删库…

Java中从String到Long的转换

Given a string and we have to convert it into a long. 给定一个字符串&#xff0c;我们必须将其转换为long。 Java conversion from String to Long Java从String转换为Long To convert a String to Long, we can use the following methods of Long class (see the synta…

pyotherside 试用

pyotherside 试用这是啥&#xff1f;用python写qt步骤&#xff1a;安装qt&#xff1a; http://www.qt.io/download-open-source/#section-2安装python3:下载源代码 https://github.com/thp/pyotherside编译 pyotherside&#xff1a; 他主页上有一个简短的说明 qmake m…

JS的条形码和二维码生成

一、前言 最近做项目用到了JS生成条形码和二维码&#xff0c;内容不多&#xff0c;整理一下方便使用。 2018年7月5日更新&#xff1a; 二维码生成时&#xff0c;如果长度太长会有异常&#xff1a; Uncaught Error: code length overflow. (1604>1056) 创建的时候&#…

synchronized 中的 4 个优化,你知道几个?

作者 | 王磊来源 | Java中文社群&#xff08;ID&#xff1a;javacn666&#xff09;转载请联系授权&#xff08;微信ID&#xff1a;GG_Stone&#xff09;synchronized 在 JDK 1.5 时性能是比较低的&#xff0c;然而在后续的版本中经过各种优化迭代&#xff0c;它的性能也得到了前…

31Exchange Server 2010跨站点部署-搬迁Exchange服务器到分支机构

16.4 将EX07和EX08搬迁到上海分支机构首先我在上海分支机机构站点下创建一个CAS阵列&#xff0c;命令如下&#xff1a;下面获取下当前域中的CAS阵列信息16.4.1搬迁CAS,HT服务器1、从广州总部NLB群集删除EX07主机2、修改EX07的IP地址为分支机构IP地址 192.168.20.27(上海分支机构…

php框架laravel_Laravel简介(PHP框架)

php框架laravel介绍 (Introduction) Laravel is a powerful framework of PHP which is used to develop a web application. Laravel is created by Taylor Otwell. This is simple, elegant, robust and easy to understand to create a fully-featured web application. If …