金属中使用的坐标系是什么?

What is the coordinate system used in metal?

在金属中着色器内部使用什么坐标系(进出)?当我们渲染到纹理时,它是一样的吗?也有 z 缓冲区?有任何不一致之处吗?最后,metal、opengl 和 directX 之间有什么区别?

金属坐标系

Metal 定义了几个标准坐标系来表示转换后的图形数据 渲染管线的不同阶段。


1) NDC(归一化设备坐标):开发人员使用此坐标来构建其几何图形并通过模型和视图矩阵在顶点着色器中转换几何图形。
点(-1, -1) in NDC 位于左下角(Y 向上)。


2)Framebuffer Coordinate(视口坐标):当我们写入attachment或从attachment中读取或copy/blitattachments之间时,我们使用framebuffer coordiante来指定位置. origin(0, 0) 位于 左上角(Y 向下)


3)纹理坐标:当我们将纹理上传到内存或从纹理中采样时,我们使用纹理坐标。 origin(0, 0) 位于 左上角(Y 向下)


D3D12 和金属

NDC: +Y 已启动。点(-1, -1)在左下角。
帧缓冲区坐标: +Y 向下。 Origin(0, 0) 在左上角。
纹理坐标: +Y向下。 Origin(0, 0) 在左上角。


OpenGL、OpenGL ES 和 WebGL

NDC: +Y 已启动。点(-1, -1)在左下角。
Framebuffer 坐标:+Y 向上。 Origin(0, 0) 在左下角。
纹理坐标: +Y向上。 Origin(0, 0) 在左下角。


Vulkan

NDC: +Y 已关闭。点(-1, -1)在左上角。
Framebuffer坐标:+Y向下。 Origin(0, 0) 在左下角。
纹理坐标: +Y向上。 Origin(0, 0) 在左下角。