我正在编写一个处理 2D 图形形状的库。
我只是想知道为什么我的坐标系范围应为 x 和 y 轴的
[-1, 1]
而不是 x 的[ 0, width]和 y 的[0, height]?
我选择了后一种系统,因为我觉得它很容易实施。
我正在编写一个处理 2D 图形形状的库。
我只是想知道为什么我的坐标系范围应为 x 和 y 轴的
[-1, 1]
而不是 x 的[ 0, width]和 y 的[0, height]?
我选择了后一种系统,因为我觉得它很容易实施。
来自 Jim Blinn 的图形管道之旅,p。138.
让我们从最初看起来最简单的转换开始:将设备坐标标准化到像素空间。变换是
s_x * X_NDC + d_x = X_pixel
s_y * Y_NDC + d_y = Y_pixel
用户/程序员在 NDC 中进行所有屏幕设计。NDC 向我们隐藏了三个令人讨厌的硬件现实:
x和y中的实际像素数。
x和y中的像素间距不均匀。
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)