Vulkan使用一个坐标系,其中(-1,-1)位于左上象限,而不是标准笛卡尔坐标系中的左下象限。所以(-1,1)在Vulkan坐标系的左下角。

(图片来源:http://vulkano.rs/guide/vertex-input)
使用Vulkan坐标系的优点是什么?我能看到的一个明显的优势是教学:它迫使人们认识到坐标系统是任意的,人们可以很容易地在它们之间进行映射。然而,我怀疑这是设计的原因。
那么,这种选择的设计原因是什么呢?
发布于 2017-12-31 15:00:55
计算机图形学中的许多坐标系将原点放在左上角,并指向y轴。
这是因为在早期的电视和显示器中,绘制图片的电子束从屏幕的左上角开始向下移动。
屏幕上的像素通常是通过在电子束向下移动时以顺序地址读取存储器,并根据每个字节按顺序读取的方式来调制该电子束。所以y轴对应于时间,它对应于内存地址。
即使在今天,内存中或位图文件中几乎所有位图的表示都是从左上角开始的。
在这种介质中绘制位图时,使用从左上角开始的坐标系统是很自然的。
当你使用左下角的原点时,事情会变得更加复杂,因为找到与像素对应的字节需要更多的数学运算,并且需要考虑位图的高度。通常没有理由引入额外的复杂性。
然而,当你开始引入矩阵变换时,使用向上的y轴就更方便了,因为这样你就可以使用你在学校学到的所有向量代数,而不必逆转y轴和你思维中的所有旋转。
所以你通常会发现,当你在一个系统中工作时,你可以做矩阵运算,平移,旋转等等,然后你会有一个向上指向的y轴。然而,在深处的某个点,计算将把坐标转换成一个向下指向的y轴,用于低层操作。
发布于 2017-12-31 19:26:37
OpenGL中常见的混淆和错误来源之一是NDC和窗口坐标y向上增长,这与几乎所有窗口系统和许多(但不是所有)图像格式中使用的惯例相反,其中y为0..1向下递增。在很多情况下,开发人员不得不在他们的转换管道中插入一个y触发器,而且并不总是很清楚他们什么时候做了,什么时候没有。
所以Vulkan决定将图像从y向下的图像格式直接加载到内存中,然后在没有任何显式y翻转的情况下将其绘制到屏幕上,以避免这种错误来源。
然后选择其他坐标系与此相一致,因为y方向永远不会在标准Vulkan变换管道中翻转方向。这意味着剪辑空间顶点坐标也有y向下增加。
这最终意味着Vulkan剪辑坐标有一个与D3D剪辑坐标不同的方向,这对支持这两个API的开发人员来说是个麻烦。因此,VK_KHR_maintenance1扩展增加了指定负视口高度的能力,这实际上是在剪辑空间中引入y翻转,以进行帧缓冲坐标转换。(D3D在本质上一直有一个隐含的y-翻转。)
无论如何,这就是我在Vulkan工作组中的推理。我不认为任何地方都有权威的公共来源。
https://stackoverflow.com/questions/48036410
复制相似问题