坐标系

作者: osbornZ | 来源:发表于2015-08-29 13:06 被阅读1349次

笛卡尔发明了平面直角坐标系,坐标系的作用是为了便于描述点的位置。(极坐标系,通过到原点的距离以及夹角角度来表示一个点。)在笛卡尔的平面坐标系的基础上出现了三维坐标系,常用的三维坐标系分两种:左手坐标系和右手坐标系。

在Mac,IOS中各种坐标系交错使用,然而,z轴的正方向总是指向观察者,也就是垂直屏幕平面向上。

Mac

在Mac中NSView的坐标系默认是右手坐标系(View其实是二维坐标系,但是为了方便我们可以假设其是三维坐标系,只是所有界面的变化都是在xy平面上),原点在左下角. NSView提供了一个可以用于覆盖的方法

-(BOOL)isFlipped;

此默认返回NO,当返回YES的时候,则坐标系变成左手坐标系,坐标原点变成左上角。

iOS

在iOS的UIView中,没有所谓的Flipped Coordinate的概念,统一使用左手坐标系,也就是坐标原点在左上角.然而不同的框架下却有不同:

  • UIKit(cocoa Touch层核心framework) Y轴向下

  • CALayer Y轴向下

  • Core Graphics(Quartz) Y轴向上

  • OpenGL ES Y轴向上

    Core Animation可以通过 CALayer的geometryFlipped 属性来适配这两种情况,它决定了一个图层的坐标是否相对于父图层垂直翻转,是一个BOOL类型。我们可以设置它为YES则子图层将会被垂直翻转。

    OpenGL-ES是 iPhone SDK的2D和3D绘制引擎,它使用左手坐标系,它的坐标系也是y轴向上的,如果不考虑z轴,在二维下它的坐标系和Quartz是一样的.(OpenGL 渲染处理 1.0,2.0 截止到现在3.0,从固定管线到可编程管线,已经提供很大程度自定义操作,在人们通过眼睛看到世间物体到最后通过设备进行输出显示在计算机屏幕,手机屏幕上这一过程 。。。==后续总结)

    使用Core Graphics画图的坐标系都是右手坐标系,由于UIKit的提供的高层方法会自动处理CTM(比如drawInRect方法),所以无需自己在CG的上下文中做处理,然而当使用CG的相关函数画图到UIView上的时候,需要注意CTM的Flip变换,要不然会出现界面上图形倒过来的现象:


在绘制到context前翻转坐标系

CGContextTranslateCTM(context, 0, height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextDrawImage(context, CGRectMake(0, 0, width, height), uiImage.CGImage);

垂直翻转投影矩阵

// 图片被颠倒的绘制到context
CGContextDrawImage(context, CGRectMake(0, 0, width, height), uiImage.CGImage);

// 设置上下颠倒的投影矩阵(则原来颠倒的图片回到了正确的方向)
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrthof( 0, framebufferWidth, framebufferHeight, 0, -1, 1 );

相关文章

  • 单目相机标定___一、原理

    原理:成像模型的坐标系为:世界坐标系 --> 相机坐标系 --> 图像坐标系 --> 像素坐标系 先说从相机坐标系...

  • WebGL知识点

    数学基础 坐标系:笛卡尔坐标系、极坐标等多坐标系:世界坐标系、物体坐标系、摄像机坐标系、惯性坐标系;向量、向量运算...

  • 2019-01-16echarts知识点

    echarts中的坐标系统分为,直角坐标系,极坐标系,雷达坐标系,地图坐标系

  • coreGraphics

    1. iOS 坐标系 NSView坐标系 : 左手坐标系 原点左上角UIView坐标系 : 左手坐标系 原点左...

  • 相机那些事(二)—— 单目成像原理与坐标变换

    一、单目相机成像原理 成像模型的坐标系为:世界坐标系 --> 相机坐标系 --> 图像坐标系 --> 像素坐标系 ...

  • 机床坐标系和工件坐标系和局部坐标系

    1:机床坐标系: 机床坐标系也称机械坐标系,它是CNC进行坐标计算的基准坐标系,是机床固有的坐标系,机床坐标系的原...

  • Android进阶笔记-6. 从源码看View体系(坐标,滑动,

    坐标系 Android中有两种坐标系,Android坐标系和视图坐标系 Android坐标系 定义:屏幕左上角顶点...

  • OpenGL下坐标系统解析

    左手坐标系和右手坐标系 OpenGL中的物体、世界、照相机坐标系都属于右手坐标系,而规范化设备坐标系使用左手坐标系...

  • Canvas绘图基础

    Canvas坐标系和绘图坐标系 Canvas绘图中牵扯到两种坐标系:Canvas坐标系与绘图坐标系。 Canvas...

  • 相机模型

    相机坐标系 -> 像素坐标系 (内参矩阵 ) 即:加上x轴y轴偏置 世界坐标系 -> 相机坐标系 世界坐标系 ->...

网友评论

    本文标题:坐标系

    本文链接:https://www.haomeiwen.com/subject/tvvkcttx.html