2D グラフィカル形状を扱うライブラリを作成しています。
x 軸と y 軸の両方で 、座標系の範囲が[-1, 1]の範囲になるのはなぜだろうと思っています。
xの[0、幅]とyの[0、高さ]の代わりに?
実装が簡単だと感じたので、後者のシステムを選びました。
2D グラフィカル形状を扱うライブラリを作成しています。
x 軸と y 軸の両方で 、座標系の範囲が[-1, 1]の範囲になるのはなぜだろうと思っています。
xの[0、幅]とyの[0、高さ]の代わりに?
実装が簡単だと感じたので、後者のシステムを選びました。
Jim Blinn のA Trip Down The Graphics Pipelineから、p. 138。
最初は最も単純な変換に見えるかもしれないものから始めましょう: 正規化されたデバイス座標をピクセル空間に変換します。変換は
s_x * X_NDC + d_x = X_pixel
s_y * Y_NDC + d_y = Y_pixel
ユーザー/プログラマーは、NDC ですべての画面設計を行います。NDC が私たちから隠しているハードウェアの厄介な現実が 3 つあります。
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)