标准化设备坐标

6
我正在编写一个处理二维图形形状的库。
我想知道为什么我的坐标系范围应该是x和y轴都在[-1, 1]而不是x轴[0, 宽度]和y轴[0, 高度]
我选择了后者的系统,因为我觉得这个实现起来比较直接。

1
为什么Y轴不像屏幕空间一样向下增加呢?这在数学上更简单。这就是我们有屏幕和世界空间变换的原因,以便我们可以针对每个对象使用合适的坐标系。 - Michael Dorgan
2
如果我只使用您的库,如何编写一个程序,在不使用归一化坐标的情况下在不同分辨率上显示相同的图像? - acrilige
1
@MichaelDorgan 我不太确定你的意思是什么。 - Jonas
1个回答

8

来自Jim Blinn的《图形管道之旅》第138页。

让我们从最简单的转换开始:将归一化设备坐标转换为像素空间。 转换如下:

s_x * X_NDC + d_x = X_pixel
s_y * Y_NDC + d_y = Y_pixel

一个用户/程序员在NDC中设计所有屏幕。硬件存在三个不良现实,但NDC给我们隐藏了它们:
1. xy中实际像素数目。 2. xy中非均匀的像素间距。 3. Y坐标的上下方向。如果必要的话,NDC到像素的转换会翻转Y,使得NDC中的Y朝上。
...
s_x = ( N_x - epsilon ) / 2
d_x = ( N_x - epsilon ) / 2

s_y = ( N_y - epsilon ) / (-2*a)
d_y = ( N_y - epsilon ) / 2

epsilon = .001
a = N_y/N_x  (physical screen aspect ratio)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接