金属中使用的坐标系是啥?
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/…?如果原点位于左上角,我希望深黑色角位于左上角。以上是关于金属中使用的坐标系是啥?的主要内容,如果未能解决你的问题,请参考以下文章