coordinate-systems - Vulkan为什么不使用 "standard cartesian"坐标系?

标签 coordinate-systems vulkan

Vulkan使用的坐标系是(-1,-1)位于左上象限,而不是像通常在学校学习的标准笛卡尔坐标系中那样位于左下象限。因此(-1,1)在Vulkan坐标系的左下象限中。

Image from: http://vulkano.rs/guide/vertex-input

(图片来自:http://vulkano.rs/guide/vertex-input)

使用Vulkan坐标系有什么优势?我可以看到的一个明显的优势是教学上的优势:它迫使人们认识到坐标系是任意的,并且可以轻松地在它们之间进行映射。但是,我怀疑这是设计原因。

那么,这种选择的设计原因是什么?

最佳答案

计算机图形学中的许多坐标系都将原点放在左上角,并将y轴指向下方。

这是因为在早期的电视和显示器中,绘制图像的电子束从屏幕的左上方开始,然后向下传播。

屏幕上的像素通常是通过以下方式制成的:在电子束沿屏幕向下移动时,依次读取存储器中的地址,并根据依次读取的每个字节来调制电子束。因此,y轴对应于时间,它对应于存储器地址。

即使在今天,内存或位图文件中几乎所有位图的表示都从左上角开始。

在这种介质中绘制位图时,自然也要使用从左上角开始的坐标系。

当您使用左下角的原点时,事情会变得有些复杂,因为找到与像素相对应的字节需要更多的数学运算,并且需要考虑位图的高度。通常没有理由引入额外的复杂性。

但是,当您开始引入矩阵变换时,使用指向上的y轴将变得更加方便,因为这使您可以使用在学校学习的所有矢量代数,而不必颠倒y轴和所有旋转思维。

因此,通常会发现,当您在一个允许进行矩阵运算,平移,旋转等操作的系统中工作时,您将拥有一个指向上方的y轴。但是,在内部某个深处,计算会将坐标转换为指向下级y轴的低级操作。

关于coordinate-systems - Vulkan为什么不使用 "standard cartesian"坐标系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48036410/

相关文章:

javascript - Mapquest坐标: what system?

vulkan - 如何让 Vulkan API 在 Google Colab 中运行

c++ - Vulkan 计算着色器不会在无限循环上停止

c++ - 如何在Qt的src目录下构建项目?

python - 如何在 python 中计算 x,y 坐标的质心

Java游戏,背景矩形是移动的

java - 旋转二维数组中的 block

iPhone、cocos2d坐标系

c++ - 在 C++ (Vulkan) 中处理 C 代码

c++ - 为什么 SSAO 仅在特定角度/距离下起作用?