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中的建模坐标系)

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


(图五)

(图六)

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

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

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

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

  1. 《Unity 3D 游戏开发技术详解与典型案例》——1.3节第一个Unity 3D程序

    本节书摘来自异步社区<Unity 3D 游戏开发技术详解与典型案例>一书中的第1章,第1.3节第一个Unity 3D程序,作者 吴亚峰 , 于复兴,更多章节内容可以访问云栖社区" ...

  2. 《Android 3D游戏开发技术宝典——OpenGL ES 2.0》——2.8节本章小结

    本节书摘来自异步社区<Android 3D游戏开发技术宝典--OpenGL ES 2.0>一书中的第2章,第2.8节本章小结,作者 吴亚峰,更多章节内容可以访问云栖社区"异步社区 ...

  3. Android 3D游戏开发技术详解与典型案例

    下载地址 <Android3D游戏开发技术详解与典型案例>主要以Android平台下3D游戏的开发为主题,并结合真实的案例向读者详细介绍了OpenGL ES的基础 知识及3D游戏程序开发的 ...

  4. 《Unity 3D 游戏开发技术详解与典型案例》——1.1节Unity 3D基础知识概览

    本节书摘来自异步社区<Unity 3D 游戏开发技术详解与典型案例>一书中的第1章,第1.1节Unity 3D基础知识概览,作者 吴亚峰 , 于复兴,更多章节内容可以访问云栖社区" ...

  5. 【备注】【C24】《Android 3D游戏开发技术详解与典型案例》PDF 下载

    [C24]<Android 3D游戏开发技术详解与典型案例>PDF 下载 目前市面上的Android技术书籍还比较少,Android3D游戏开发的书籍更是没有.因此,在现在市面上,Andr ...

  6. 《Android 3D游戏开发技术宝典——OpenGL ES 2.0》.(吴亚峰).[PDF]ckook

    图书作者: 吴亚峰 图书编号: 9787115277701 图书格式: PDF 出 版 社: 人民邮电出版社 出版年份: 2012 图书页数: 700-800 [内容简介] 随着智能手机移动嵌入式平台 ...

  7. 《Android 3D游戏开发技术宝典——OpenGL ES 2.0》——2.4节文件I/O

    本节书摘来自异步社区<Android 3D游戏开发技术宝典--OpenGL ES 2.0>一书中的第2章,第2.4节文件I/O,作者 吴亚峰,更多章节内容可以访问云栖社区"异步社 ...

  8. 《Android 3D游戏开发技术宝典——OpenGL ES 2.0》——2.1节游戏中的音效

    本节书摘来自异步社区<Android 3D游戏开发技术宝典--OpenGL ES 2.0>一书中的第2章,第2.1节游戏中的音效,作者 吴亚峰,更多章节内容可以访问云栖社区"异步 ...

  9. 《Android 3D游戏开发技术宝典——OpenGL ES 2.0》——2.3节手机自带数据库——SQLite...

    本节书摘来自异步社区<Android 3D游戏开发技术宝典--OpenGL ES 2.0>一书中的第2章,第2.3节手机自带数据库--SQLite,作者 吴亚峰,更多章节内容可以访问云栖社 ...

最新文章

  1. 《计算机基础(2008版)》第4次作业,计算机基础第4次作业.doc
  2. window平台下 Eclipse Ndk开发中的Method 'NewStringUTF' could not be resolved问题
  3. VBA经典常用语句400句
  4. spark2.2读写操作hive和mysql数据库
  5. socketserver
  6. chemdraw怎么连接两个结构_利用神经结构搜索构建快速准确轻量级的超分辨率网络...
  7. Linux kernel 4.x中的min和max宏
  8. FlygonTiebaToolkit 的开源决定
  9. javaweb(03) jQuery学习笔记
  10. iOS链式动画、Spring动画,TimingFunction扩展
  11. codeforces 712C C. Memory and De-Evolution(贪心)
  12. 云更新网吧系统服务器,云更新网吧服务器环境要求
  13. 计算机毕设应用型开题报告,毕设开题报告范文.doc
  14. 【Python】如何将文件中\xe8\x85\xbe\xe8字符转成中文?
  15. 用 Python 写软件原来这么简单!
  16. New Online Judge P1128-绝地求生(多源bfs)
  17. 安装配置flume(超详细)
  18. 西门子PLC1200学习之PID总结
  19. 招商银行信用卡中心测试工程师校招面经
  20. 开源社邀请您参加2022 第四届天津前端开发者大会

热门文章

  1. HI3861学习笔记(14)——ADC接口使用
  2. 最没灵魂的爬虫——Selenium 游戏信息的爬取与分析
  3. 知识那么多,作为一个IT人我们该怎样有效的学习?
  4. 全网最好用的图文识别、证件扫描、PDF转换等工具,已解锁永久会员!
  5. 硕士毕业论文模板(专业硕士)
  6. 草料二维码--在线二维码生成器
  7. 刷脸时代:勿信谣言,告诉你真实的刷脸支付系统
  8. 【java删除指定文件夹或者文件】
  9. 动态分析Android App之动态调试
  10. oracle分析函数用途,深入探讨:oracle中row_number() over()分析函数用法