金属中使用的坐标系是啥?

Posted

技术标签:

【中文标题】金属中使用的坐标系是啥?【英文标题】:What is the coordinate system used in metal?金属中使用的坐标系是什么? 【发布时间】:2020-03-01 06:38:45 【问题描述】:

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

【问题讨论】:

【参考方案1】:

金属坐标系

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


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


2)帧缓冲坐标(视口坐标):当我们写入附件或从附件读取或在附件之间复制/blit时,我们使用帧缓冲坐标来指定位置。 origin(0, 0) 位于左上角(Y 向下)


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


D3D12 和金属

NDC: +Y 向上。 Point(-1, -1) 在左下角。帧缓冲坐标: +Y 向下。 Origin(0, 0) 位于左上角。纹理坐标: +Y 向下。 Origin(0, 0) 在左上角。


OpenGL、OpenGL ES 和 WebGL

NDC: +Y 向上。 Point(-1, -1) 在左下角。Framebuffer 坐标:+Y 向上。 Origin(0, 0) 位于左下角。纹理坐标: +Y 向上。 Origin(0, 0) 在左下角。


Vulkan

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


【讨论】:

仍然令人困惑的是,虽然这些坐标系在 Metal 文档中,所以必须是正确的,但为什么在执行如下所示的操作时图像显示左下角的原点:***.com/questions/55821459/…?如果原点位于左上角,我希望深黑色角位于左上角。

以上是关于金属中使用的坐标系是啥?的主要内容,如果未能解决你的问题,请参考以下文章

金属着色器纹理读取与示例

末地城堡的坐标指令是啥?

在CAD中为啥有世界坐标系与用户坐标系 它们之间有啥不同,主要用处是啥?

在回归模型中使用 gps 坐标的最佳方法是啥

三维坐标系中 两点间的距离公式是啥

36开头的坐标是啥坐标系