Metalの座標系

metal-coordinate.png

デフォルトで何も行列を渡さないと、正規化デバイス座標になってます
真ん中は(xyz)=(0,0,0.5)
画面左下は(x,y)=(-1,-1)
画面右上が(x,y)=(1,1)
* MTLRenderCommandEncoderのsetViewPort関数で座標が決まる

+ ビューポートを変えるには

let viewport=MTLViewport(originX: 0.0,originY: 0.0,width: 100,height: 100,znear: 0.0,zfar:1.0)
renderEncoder.setViewport(viewport)//注意 renderEncoder.setVertexBufferよりも前に呼ばないと効き目がありません

デフォルト値は

originX = 0.0, originY = 0.0, width = w, height = h, znear = 0.0, and zfar = 1.0

w,hは

var drawableSize = view.bounds.size
drawableSize.width = drawableSize.width * CGFloat(view.contentScaleFactor)
drawableSize.height = drawableSize.height * CGFloat(view.contentScaleFactor)

このdrawableSize.widthとheightの値。
つまり、Retinaディスプレイだったら、2倍されてるデカイ数値の方
になっているらしい[2]。

座標系を変えるには

let projectionMatrix: GLKMatrix4 = GLKMatrix4MakeOrtho(0.0,width,0.0,height,0.0,1.0)

サポートサイト Wikidot.com