iOS座標系

1877 ワード

iOS座標系
参照リンク:http://www.jianshu.com/p/34dc7c2c974f
デカルトは平面直角座標系を発明し,座標系の役割は点の位置を記述しやすいようにした.(極座標系は、原点までの距離と角度で点を表す.)デカルトの平面座標系に基づいて3次元座標系が現れ、よく使われる3次元座標系は左手座標系と右手座標系の2種類に分けられる.(親指はz軸を指し、他の4本の指はx軸からy軸方向に沿っている)
MacではIOSでは様々な座標系が交錯して用いられるが,z軸の正方向は常に観察者,すなわち垂直スクリーン平面を上に向けている.
Mac
MacにおけるNSViewの座標系デフォルトは (Viewは実は2次元座標系であるが、便宜上3次元座標系であると仮定できるが、すべてのインタフェースの変化がxy平面上にあるだけである)、 .NSViewはカバーに利用できる方法を提供している.
-(BOOL)isFlipped;

このデフォルトはNOを返し、YESを返すと座標系が左手座標系になり、座標原点が左上になります.
IOS
iOSのUIViewでは、Flipped Coordinateという概念はありません..しかし、フレームワークによって異なります.
  • UImit(cocoa Touch層コアframework)Y軸下左座標系
  • CALayer Y軸下左座標系
  • Core Graphics(Quartz)Y軸方向右手座標系
  • OpenGL ESY軸方向右手座標系Core Animationは、CALayerのgeometryFlipped属性によってこの2つのケースを適合させることができ、 を決定するBOOLタイプである.YESに設定すると、サブレイヤが垂直に反転します.OpenGL-ESはiPhone SDKの2 Dと3 D描画エンジンで、右手座標系を使用し、その座標系もy軸方向にあり、z軸を考慮しなければ、2次元では座標系とQuartzは同じである.(OpenGLレンダリング処理1.0,2.0は現在3.0まで、固定パイプラインからプログラマブルパイプラインまで、かなりのカスタム操作が提供されており、人々が目で世間の物体を見てから最後にデバイスで出力してコンピュータ画面、携帯電話画面に表示するまでの過程である.==後述)
  • **Core Graphicsプロットを使用する座標系はすべて右手座標系であり、UImitが提供する上位レベルのメソッドは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 );