Ios

iOS-koordinaattijärjestelmä

Ios Coordinate System



iOS-koordinaattijärjestelmä

Viitelinkki: http://www.jianshu.com/p/34dc7c2c974f



Descartes keksi tasomaisen suorakulmaisen koordinaattijärjestelmän, ja koordinaatistoa käytetään helpottamaan pisteen sijainnin kuvaamista. (Polaarikoordinaattijärjestelmä, pistettä edustaa etäisyys lähtöpaikkaan ja kulman kulma.) Kolmiulotteinen koordinaatisto ilmestyy suorakulmaisen tasokoordinaattijärjestelmän perusteella. Yleisesti käytetty kolmiulotteinen koordinaattijärjestelmä on jaettu kahteen tyyppiin: vasemmanpuoleiseen ja oikeaan. Koordinaattijärjestelmä. (Peukalo osoittaa z-akselille ja muut neljä sormea ​​seuraavat x-akselia y-akseliin)



Macissa IOS: n eri koordinaatistojärjestelmät lomittuvat, mutta z-akselin positiivinen suunta osoittaa aina tarkkailijaan, toisin sanoen pystysuora näytön taso on ylöspäin.



Mac

Macissa NSView-koordinaattijärjestelmän oletusarvo on Right hand coordinate system (View on itse asiassa kaksiulotteinen koordinaattijärjestelmä, mutta mukavuuden vuoksi voimme olettaa, että se on kolmiulotteinen koordinaattijärjestelmä, mutta kaikki rajapinnan muutokset ovat xy-tasolla ) Origin in the lower left corner NSView tarjoaa tavan ohittaa

-(BOOL)isFlipped

Oletuksena on EI. Kun KYLLÄ palautetaan, koordinaattijärjestelmästä tulee vasemmanpuoleinen koordinaatistojärjestelmä ja koordinaattialkusta vasen yläkulma.

IOS

IOS: n UIView: ssa ei ole käännetyn koordinaatin käsitettä. Uniform use of the left-handed coordinate system, that is, the origin of the coordinates in the upper left corner Eri kehyksissä on kuitenkin eroja:



  • UIKit (cocoa Touch layer core framework) Y-akseli alas vasemmanpuoleista koordinaattijärjestelmää

  • CALayer Y -aksiaalinen vasemmanpuoleinen koordinaattijärjestelmä

  • Ydingrafiikan (kvartsi) Y-akselin pystysuora oikeanpuoleinen koordinaattijärjestelmä

  • OpenGL ES Y aksiaalinen pystysuora oikeanpuoleinen koordinaattijärjestelmä

    Ydinanimaatio voi sopeutua molempiin tapauksiin CALayerin geometryFlipped-ominaisuuden avulla, joka määrittää Whether the coordinates of a layer are flipped vertically relative to the parent layer on BOOL-tyyppi. Voimme asettaa sen KYLLÄ ja alikerros käännetään pystysuunnassa.

    OpenGL-ES on iPhone SDK: n 2D- ja 3D-renderointimoottori. Se käyttää oikeakätistä koordinaattijärjestelmää. Sen koordinaattijärjestelmä on myös y-akselilla. Jos z-akselia ei oteta huomioon, sen koordinaatisto on sama kuin Kvartsi kahdessa ulottuvuudessa. (OpenGL-renderöintiprosessointi 1.0, 2.0 - toistaiseksi 3.0, kiinteästä putkesta ohjelmoitavaan putkeen, on tarjonnut suuren määrän mukautettua toimintaa, kun ihmiset näkevät maailman objektin silmien kautta viimeiseen ulostuloon tietokoneen näytöllä olevan laitteen näytön kautta, matkapuhelimen näyttö Tässä prosessissa ... == seuraava yhteenveto)

** Core Graphics -piirustusta käyttävät koordinaattijärjestelmät ovat oikeakätisiä koordinaattijärjestelmiä. Koska UIKitin tarjoamat korkean tason menetelmät käsittelevät automaattisesti CTM: ää (kuten drawInRect-menetelmä), sinun ei tarvitse tehdä sitä itse CG: n yhteydessä. Kuitenkin, kun käytetään CG-toimintoja. Kun piirrät UIView-sovellukseen, sinun on kiinnitettävä huomiota CTM: n Flip-muunnokseen, muuten tapahtuu ilmiö, että käyttöliittymän grafiikka on päinvastainen: **


Käännä koordinaatisto ennen kontekstiin piirtämistä

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

Pystysuuntainen kääntyvä projektiomatriisi

// The image is drawn upside down to the context CGContextDrawImage(context, CGRectMake(0, 0, width, height), uiImage.CGImage) // Set the upside down projection matrix (the original inverted image is back in the right direction) glMatrixMode(GL_PROJECTION) glLoadIdentity() glOrthof( 0, framebufferWidth, framebufferHeight, 0, -1, 1 )