坐标系
左手坐标系与右手坐标系
1.定义与判定方法
右手坐标系
伸出右手,让拇指指向X轴的正方向,食指指向Y轴的正方向,此时中指自然弯曲的方向就是Z轴的正方向。在这个坐标系中,Z轴垂直于X、Y轴并且指向“自己”(向外)。例如,在数学中的笛卡尔坐标系通常采用右手坐标系。
左手坐标系
伸出左手,拇指指向X轴正方向,食指指向Y轴正方向,中指自然弯曲的方向为Z轴正方向,但与右手坐标系不同,它指向屏幕外(对于平面图形理解来说)。在计算机图形学中,像Unity游戏引擎就使用左手坐标系。
注:Unity世界坐标为左手系,但摄像机空间为右手系(Z轴正向为摄像机前方)
三维坐标系
世界坐标系
定义
世界坐标系是一个固定的、全局的坐标系,它定义了整个场景的空间布局。所有的物体都可以相对于这个坐标系来确定自己的位置。
例如,在一个大型的3D游戏场景中,世界坐标系的原点可能设定在场景的中心,X轴指向东边,Y轴指向天空,Z轴指向北边。
应用场景
在游戏开发中,当规划整个游戏场景的布局,如放置建筑物、地形等元素时,世界坐标系起着关键的作用。在机器人学中,世界坐标系可以用来描述机器人在一个大环境中的位置
局部坐标系
定义
局部坐标系是相对于某个特定物体或对象建立的坐标系。它的原点和坐标轴方向取决于该物体。
例如,一个角色模型有自己的局部坐标系,原点可能在角色的重心位置,X轴指向角色的前方,Y轴指向角色的上方,Z轴指向角色的右侧。
应用场景
在游戏角色动画中,角色的肢体运动是相对于其局部坐标系进行的。比如手臂的摆动,是在以角色肩部为原点的局部坐标系内进行角度的计算和变换的。在机械工程中,对于一个复杂的机械部件,如发动机,也可以建立局部坐标系来分析其内部零件的运动和位置关系。
相机坐标系
定义
相机坐标系是以相机的光心为原点建立起来的坐标系。它的坐标轴方向与相机的朝向有关,通常X轴指向相机的右方,Y轴指向相机的上方,Z轴指向相机的前方(即镜头所对着的方向)。
例如,在摄影中,当我们想要确定画面中的物体在相机视角下的位置时,就需要用到相机坐标系。
应用场景
在计算机图形学的渲染过程中,将3D场景中的物体转换为2D图像时,相机坐标系起着关键的作用。它决定了哪些物体在相机的视野范围内,以及它们在图像中的位置。
屏幕坐标系
定义
屏幕坐标系是用于描述屏幕上的像素位置的坐标系。它的原点通常在屏幕的左上角,X轴向右延伸,Y轴向下延伸。
例如,在网页设计或者手机APP界面开发中,我们根据屏幕坐标系来确定按钮、文本框等元素在屏幕上的显示位置。
应用场景
在图形用户界面(GUI)开发中,无论是桌面应用还是移动应用,屏幕坐标系都被广泛用于布局和定位各种界面元素。
补充
为什么有左手与右手坐标系
一、数学起源:右手系的“天然优势”
数学中,右手坐标系是笛卡尔坐标系的传统定义,其核心依据是右手螺旋定则(Right-hand Rule)。这一规则最早由法国数学家达朗贝尔(Jean le Rond d'Alembert)在18世纪提出,后被广泛接受为数学与物理的标准:
右手的拇指、食指、中指两两垂直,分别对应X、Y、Z轴正方向,符合人类对“三维空间延伸”的直觉(如:X向右、Y向上、Z向前/向外)。
叉积运算(向量叉乘)在右手系中满足 X×Y=Z,这与物理中的力矩、角动量等矢量方向完全一致(例如,绕Z轴旋转的力矩方向由右手定则确定)。
因此,数学与理论物理领域天然倾向于右手系,它保证了公式的一致性和计算的简洁性。
二、计算机图形学的“实用主义”转向
当数学理论进入计算机图形学应用时,硬件限制与显示需求推动了左手系的普及。早期计算机图形系统(如20世纪70-80年代的图形工作站)面临两个关键问题:
1. 屏幕显示的“深度”表示
显示器的光栅扫描是从左到右、从上到下(类似纸张的阅读顺序),而3D图形需要将物体投影到2D屏幕。此时,Z轴(深度轴)的方向需要与“近大远小”的透视规律匹配:
在左手系中,Z轴正方向指向屏幕内部(背离观察者),物体的Z值越大表示离相机越远。这种设定下,投影变换(如透视投影矩阵)的计算更直接——只需将Z值映射到深度缓冲区(Depth Buffer)即可,无需额外符号调整。
若使用右手系(Z轴向外),则离相机越远的物体Z值越小,投影时需反转Z轴方向,增加了计算复杂度。
2. 硬件内存与寄存器的“低位优先”设计
早期图形硬件(如帧缓冲、深度缓冲)的内存地址或寄存器通常按“低位到高位”映射屏幕坐标(例如,屏幕左下角为原点(0,0),右上角为(maxX, maxY))。左手系的Y轴向上与屏幕Y轴(向下)方向相反,但通过简单的坐标变换(如Y' = maxY - Y)即可适配,而Z轴的“向内”方向更符合深度缓冲的存储逻辑(深度值越大,离相机越远)。
三、行业标准的“路径依赖”
随着计算机图形学的发展,不同领域逐渐形成了基于硬件传统的行业标准,进一步固化了左右手系的选择:
1. 游戏与实时渲染领域(左手系主导)
DirectX(微软的图形API)选择左手系,主要因早期Xbox/PC游戏的硬件(如显卡)更适配左手系的深度计算。后续Unity、Unreal Engine等引擎为降低开发门槛,直接继承了DirectX的坐标系设定。
Babylon.js(网页3D引擎)同样基于DirectX的思路,因早期WebGL硬件兼容性问题,选择左手系以简化浏览器端的图形计算。
2. 影视建模与数学工具领域(右手系主导)
OpenGL(跨平台图形API)延续了数学传统,采用右手系(Z轴向外)。其设计目标包括与数学软件(如MATLAB)的兼容,因此叉积、旋转方向等规则完全遵循右手定则。
3ds Max、Maya等3D建模软件选择右手系(或混合系),因艺术家需要与数学工具(如CAD软件)协同工作,右手系的叉积方向(如法线计算)更符合物理直觉。
四、“差异”的本质:应用场景的适配
两种坐标系的核心差异(Z轴方向、旋转方向)本质上是“数学理论”与“工程实践”的妥协:
数学需要统一的规则(右手系)以保证理论的普适性;
工程(如图形渲染、游戏开发)需要适配硬件特性(如屏幕显示、内存存储)以提高效率。
总结:为什么会有两种?
两种坐标系的存在是历史传统、数学理论、硬件限制与应用需求共同作用的结果:
右手系是数学与理论的“天然语言”,保证了公式的一致性;
左手系是工程实践的“实用选择”,适配了早期图形硬件的显示与计算需求;
行业标准的“路径依赖”(如DirectX vs OpenGL)进一步固化了二者的应用场景。
理解二者的差异,本质上是理解“理论如何落地为工程”的过程——没有绝对的“优劣”,只有“是否适配具体场景”。