In metal what coordinate system to use inside shader (in and out)? and when we render to texture is it the same? with the z buffer also? Are there any inconsistencies? finally what are the difference between metal, opengl and directX ?
1 Answers
Metal Coordinate Systems
Metal defines several standard coordinate systems to represent transformed graphics data at different stages along the rendering pipeline.
1) NDC (Normalized Device Coordinate): this coordinates is used by developers to construct their geometries and transform the geometries in vertex shader via model and view matrices.
Point(-1, -1) in NDC is located at the the bottom left corner (Y up)..
2) Framebuffer Coordinate (Viewport coordinate): when we write into attachment or read from attachment or copy/blit between attachments, we use framebuffer coordiante to specify the location. The origin(0, 0) is located at the top-left corner (Y down).
3) Texture Coordinate: when we upload texture into memory or sample from texture, we use texture coordinate. The origin(0, 0) is located at the top-left corner (Y down).
D3D12 and Metal
NDC: +Y is up. Point(-1, -1) is at the bottom left corner.
Framebuffer coordinate: +Y is down. Origin(0, 0) is at the top left corner.
Texture coordinate: +Y is down. Origin(0, 0) is at the top left corner.
OpenGL, OpenGL ES and WebGL
NDC: +Y is up. Point(-1, -1) is at the bottom left corner.
Framebuffer coordinate: +Y is up. Origin(0, 0) is at the bottom left corner.
Texture coordinate: +Y is up. Origin(0, 0) is at the bottom left corner.
Vulkan
NDC: +Y is down. Point(-1, -1) is at the top left corner.
Framebuffer coordinate: +Y is down. Origin(0, 0) is at the bottom left corner.
Texture coordinate: +Y is up. Origin(0, 0) is at the bottom left corner.

- 23,478
- 6
- 59
- 81

- 9,688
- 2
- 24
- 48
-
What remains confusing is that while these coordinate systems are in the Metal docs so must be correct, why do images show that the origin in the lower left when doing something like you see here: https://stackoverflow.com/questions/55821459/confused-about-thread-position-in-grid ? I would expect the dark black corner to be in the upper left if that is where the origin is. – johnbakers Dec 28 '19 at 13:38