3D和2D游戏开发技术里的坐标系总结

news/2025/3/5 6:09:00/

from:http://www.liketocode.com/coding/208.htm


最近在做unity3d开发,坐标系的概念把自己搞得好迷糊,发现理解好坐标系的东西的确对一个新手来说是必经之路,而且是基础中的重点。故在此总结下在Unity3D开发中,以及在其他游戏开发中的一些坐标系的概念。也在此分享下,一起进步。

第一部分:2D游戏开发。

先从简单2D世界说起吧。2D开发里的坐标系比较简单,2D坐标常见的有两种:

  • 一种是以flash为代表的,以屏幕左上角为(0,0)点,右下角为(Screen.width, Screen.height)点。
  • 一种是以cocos2d系列为代表的,由于使用的是OpenGL系提供的API,故以屏幕左下角为(0,0)点,右上角(Screen.width, Screen.height)点。

2D的坐标系就是如此简单,下面重点介绍3d的坐标系。

第二部分:3D游戏开发。

在3D开发中,用的是笛卡尔三维坐标系,包含两种3D的坐标系:左手坐标系和右手坐标系。

很多新人开始学3D开发时都会和我一样有很多疑惑,例如Unity3D和OpenGL, DirectX有啥区别?他们的坐标都是如何的?如何转换到屏幕上的坐标?这些问题的确挺头疼的。下面就逐个讲讲。

1.Unity3D和OpenGL, DirectX有啥不同?

其实他们拿来对比,是不太妥当的,因为他们不是在同一层级上的,不构成并列选择关系。Unity3D调用的是DirectX 和 OpenGL提供的 API。也可以这么理解,Unity3D封装了OpenGL和DirectX。

简单的说,就是:你的程序–>Unity3D–>DirectX/OpenGL–>图形设备(显卡)。

2.左手坐标系和右手坐标系如何理解

按照教科书的概念,左手坐标系和右手坐标系应该如图1:

图一:两种坐标系
(图一:两种坐标系)

那如何理解“左手”和“右手”的概念呢?我们做个实验(为此,笔者把自己的手指都秀出来了~)

伸出左手(或右手),中指为x轴,拇指为y轴,食指为z轴,就组成了左手(或右手)坐标系

图二:左手坐标系实例
(图二:左手坐标系实例)

图三:左手坐标系实例
(图三:左手坐标系实例)

3.那u3d用到的坐标系是啥坐标系呢?

答:在Unity3D里都是左手坐标系

u3d中世界坐标:左手坐标系。

屏幕坐标系:左手坐标系。什么!屏幕的坐标系是三维的?没错。那该如何理解?这样理解吧,屏幕从左下角开始为(0,0,0)点,往竖方向向上y递增,往右x递增,往屏幕里面z递增.

GUI坐标:2d的,左上角为(0,0)。和flash里的原点一样都是从左上开始。

简单来说,就是,在u3d构建中,3d的坐标都是左手坐标系。

4.那右手坐标系出现在什么地方?

1.OpenGL的世界坐标系是右手坐标系(蛋疼啊,和U3D习惯不一样)。

2.建模软件3dsMax:右手坐标系,而且z轴向上。在输出fbx保持up为Y轴的前提下,若不对3dsmax中模型的pivot进行旋转,则导入到Unity3D中后,模型会基于x有-90°的旋转。这种选择可以使得物体在直观印象不变的情况下,直接把左手坐标系转成右手坐标系。如图四,模型是以右手坐标系构建的。

图四:3ds max中的建模坐标系
(图四:3ds max中的建模坐标系)

但导入到unity后,绕x轴转了-90度,如图五,变成了图六所示。

(图五)
(图五)

(图六)
(图六)

5.为啥会左手坐标系和右手坐标系两种东西

额,这是当初标准没统一的问题。蛋疼的历史。

-- EOF -- 看完了, 留个脚印~~ ^_^

http://www.ppmy.cn/news/505813.html

相关文章

2d-3d坐标转换

对于常规相机,SLAM里使用针孔相机模型   简而言之,一个空间点[x,y,z]和它在图像中的像素坐标[u,v,d] (d 指深度数据) 的对应关系是这样的: u x ⋅ f x z c x , ux⋅f_xzcx, ux⋅fx​zcx, v y ⋅ f y z c y , vy⋅f_yzcy, vy⋅fy​zcy…

2d图形旋转

2d图形旋转 1.这里旋转使用数学公式: xr x * cos(theta) - y * sin(theta); yr x * sin(theta) y * cos(theta); 2.如果以左上角为原点(0,0),x方向向右增加,y方向向下增加的话,对于原图形旋转的100度并不等于连续20次的旋转5度的结果,可以…

2D-2D:对极几何与三角测量

文章目录 尺度不确定性对极几何尺度不确定性初始化的纯旋转问题 三角测量最小二乘法 单应性矩阵由像素系到相机系由像素系a到像素系b求解单应性矩阵 尺度不确定性 如果把相机的运动和场景同时放大两倍,单目相机所看到的像是一样的。同样的,把这个大小乘…

3D空间中的点坐标转化为屏幕二维点坐标(二)

👉原文地址:3D空间中的点坐标转化为屏幕二维点坐标(二)👈 上一节,简单的介绍了计算机时如何将三维世界中的点转化成屏幕上的二维点坐标的,知道了透视矩阵的作用。这一节内容,就是介…

3D点云综述

转载请注明作者和出处: http://blog.csdn.net/john_bh/ 论文链接:Deep Learning for 3D Point Clouds: A Survey 作者及团队:国防科大 & 中山大学 & 牛津大学 会议及时间: Arxiv 2019 code:https://github.co…

3D空间中的点坐标转化为屏幕二维点坐标(一)

每个人在进入计算机图形学的世界中,都有一个同样的困惑,三维世界中的三维坐标是如何被转换成屏幕上的二维坐标的,我如何在屏幕上找到一个点(二维点)对应三维世界中的点(三维点)呢? …

相机标定2d坐标转3d坐标

相机标定原理: 可以看看这两篇: https://blog.csdn.net/baidu_38172402/article/details/81949447 https://blog.csdn.net/weixin_43206570/article/details/84797361 在图像测量过程以及机器视觉应用中,为确定空间物体表面某点的三维几何位…

将3D坐标转成2D坐标的方法

将3D坐标转成2D坐标的方法。3D坐标在Unity中称作World Space,2D坐标称作Screen Space, 是以pixel为基准,以iPad 1024 x 768(4:3)的解析度为例子: 左上角是 (0,0) 右下角是(1024,768&#xff0…