Unity学习笔记 球形全景图平面像素坐标与三维坐标系上的坐标之间的转换
前言
本文将讲解如何通过球形全景图上的二维坐标通过换算得到三维坐标系上的三维坐标。具体场景就是,已知道一张全景图上某个点的像素位置(px,py),最终可以算出该点对应在球体上的三维坐标(X,Y,Z)。
相关概念
在说明原理之前,有几个概念是必须了解的。
首先是全景图研究中几个比较常见/常听的三维坐标系:
1. 三维直角坐标系(三维笛卡尔坐标系)
在二维笛卡尔坐标系的基础上根据右手定则增加第三维坐标(即Z轴)而形成的。
不过多介绍了,从小学到大的东西。
2. 球坐标系[摘自百度]
3. Unity的世界坐标系(左手坐标系)
Unity的世界坐标系其实就是左手坐标系,也就是Z轴为正,X轴为右,Y轴为上。
坐标转换原理
转换的前提条件:
- 完整的全景平面图
- 全景平面图比例是2:1
完整的转换流程为:
二维坐标 ——> 球面坐标系坐标 ——> 直角坐标系
1. 全景图二维坐标与球面坐标系的对应关系
如下图所示,因为全景图是直接投影到球体上来显示的,也就是说平面的二维信息是直接对应着球体上的三维信息。 (里面用的是球面坐标系)
按照全景图投影的原理,想象一下你现在站在坐标系的原点上,你正面朝着X轴的正方向望去,全景平面图的最左边到最右边的内容相当于以你水平位置-180°到180°的内容,从最上边到最下边内容相当于以你垂直位置90°到-90°的内容。
对于平面上的二维坐标,根据全景图的长和宽,就可以映射出对应球面上的天顶角θ和方位角φ。
计算出(φ,θ)的公式为:
注意这个的方位角φ是与y轴的夹角,也就是说φ不是我们平时理解的二维坐标系的0到y轴上的值,而是π/2到y轴上的值(可以理解为等于py线段的值)。
2. 球面坐标系与直角坐标系的转换
在上一步算出天顶角和方位角之后,根据球体的半径(r)计算出直角坐标系上的三维坐标就很简单了,无非就是三角函数的计算,下面直接跳过公式推导过程。【需要注意的是,输出的目标三维坐标系不同,计算的方式略有不同!】
- 计算直角坐标系(三维笛卡尔坐标系)的三维坐标
- 计算Unity的世界坐标系(左手坐标系)的三维坐标
至此,由平面二维坐标转换到三维坐标系上的三维坐标已经结束,其实原理很简单,只是说比较容易搞混淆要输出的坐标系和一些概念导致算错结果。
反之,从三维坐标转换到二维坐标原理也是一样,这里就不做论述了。
Unity学习笔记 球形全景图平面像素坐标与三维坐标系上的坐标之间的转换相关推荐
- Unity学习笔记 解决Cinemachine AutoDolly的虚拟相机在轨道上不按轨道前进方向运动的问题
问题 在使用Cinemachine提供的Tracked Dolly来做路径运动时,若绘制的轨道有交错或者相对接近的地方,可能会出现摄像机没有按照轨道前进的方向实时移动而跳回到了原来的轨道上的情况. 解 ...
- Unity学习笔记1 简易2D横版RPG游戏制作(一)
这个教程是参考一个YouTube上面的教程做的,原作者的教程做得比较简单,我先参考着做一遍,毕竟我也只是个初学者,还没办法完全自制哈哈.不过我之前也看过一个2D平台游戏的系列教程了,以后会整合起来,做 ...
- 千锋Unity学习笔记
学习笔记:[千锋合集]史上最全Unity3D全套入门教程|匠心之作 文章目录 初级 1.0数学 1.0点乘叉乘 1.点乘: 2.叉乘: 2.0Mathf 3.0Vector 4.0旋转 2.0组件 3 ...
- 【Unity学习笔记】[Unity中文课堂教程] C#中级编程代码
[Unity学习笔记][Unity中文课堂教程] C#中级编程代码 最近想补一补C#基础,Unity官方的C#中级编程教程质量很高,于是开个帖子把跟着敲+记录了部分价讲解和我自己的理解的代码存在这 原 ...
- unity学习笔记-番外(3d模型的动作设计以及导入-2018版)材质的替换以及动作穿模(自己的手穿模到自己的其他部位)
unity学习笔记-番外(3d模型的动作设计以及导入) 动作设计白嫖方法 方法一:小k网 需要注意的地方 方法二:mixamo 需要注意的地方 材质的替换 一 动作的穿模 2021.5.13更新 -2 ...
- 【Unity学习笔记】b站Unity架构课Unity3D 商业化的网络游戏架构(高级/主程级别)
[Unity学习笔记]b站Unity架构课Unity3D 商业化的网络游戏架构(高级/主程级别) 自己跟着学完了,写了不少代码,会放在CSDN代码库,因为老师并没有提供源码,录屏也不是完全连续,所以难 ...
- Unity学习笔记——Mesh
Unity学习笔记--Mesh Unity中的Mesh组件是一个很好玩的东西,这次的目标是根据高程图创建出一个平面. 1.用脚本创建一个简单的三角形 新建空的物体,挂上MeshFilter.MeshR ...
- [Unity学习笔记:FPS游戏制作(3)]子弹拖尾,碰撞与枪口火焰效果
往期博客[Unity学习笔记:FPS游戏制作(2)] 发射子弹----(2021.6.20学习笔记) 文章目录 一,实现思路 二,粒子效果的实现 (1)子弹拖尾特效的实现 (2)枪口火焰特效的实现 ( ...
- [Unity学习笔记:FPS游戏制作(2)] 发射子弹————(2021.6.20学习笔记)
往期博客 [Unity学习笔记:FPS游戏制作(1)]角色的移动,旋转与推进上升----(2021.6.13学习笔记) 文章目录 一,实现思路 二,实现代码 三,脚本的使用方法 四,最终效果 一,实现 ...
最新文章
- 细粒度语义分割:ICCV2019论文解析
- OpenCV神经网络ANN代码编译运行与解读(二)
- dalvik Java类库中本地类
- 计算机组成要素三:时序逻辑:构建计算机随机存取单元RAM及计数器PC
- Laravel 学习笔记之 Query Builder 源码解析(下)
- 一款非常好看的雷姆背景的时间单页(附雷姆图片)
- 整理 linux常用命令及工具
- 抓包工具Charles —— 绿化、抓包入门
- 怎样固定计算机桌面背景,Win7桌面背景老是被修改如何将其锁定不让他人随意修改...
- Redis客户端Lettuce深度分析介绍
- 中国富豪第一桶金挖掘的九大方式
- Coding(码市)教程(一):基础配置
- 郑州轻工业大学 2021-2022(1)期末模拟测试一 答案
- Theano安装教程
- 两步解决macbook电池不充电
- 服务器返回状态码说明
- GlusterFS扩展操作及性能测试工具
- IDEA怎么使折叠合并的文件夹分开
- 传智播客设计学院简介网页代码
- RTSP安防网络摄像头/海康大华硬盘录像机网页无插件直播之EasyNVR流媒体服务器系列产品直播延时问题解析