コンピューターグラフィックスの原点が左上にあるのはなぜですか?


36

私が見てきたことから、ほとんどすべてのものは(0、0)が左上にあり、正のY軸が画面の下方向に向かう座標を使用します。

なぜこんな感じ?単純な数学クラスのグラフに示されているように、従来の正のY軸が上向きにならないのはなぜですか?


7
私は、上から始めて下に行くにつれて増加することが、数学的慣習よりも理にかなっていると主張します。これは、インドヨーロッパ言語の読み書きの方法に密接に関係しているからです。
パンダパジャマ14

3
地上はあなたの起源であり、あなたの世界の大部分は地上にあるので、物理オブジェクトを描くときはY +アップが理にかなっていると思います。ただし、ディスプレイについては、インドヨーロッパ言語の記述方法を模倣することに関連していると仮定します。
パンダパジャマ14

1
非常に関連性が高い
マイケルハウス

4
OpenGLの正規化されたデバイス座標には、上向きのY軸がありませんか?
レイ14

1
あなたは本質的に「起源の起源は何ですか?」と尋ねていますか?
ケン14

回答:


42

これは、履歴で発生します。初期のコンピューターには、左上隅から右下に向かって陰極線で画像を「描画」する陰極線管(CRT)がありました。

グラフィックスカードメモリとCRTの間のインターフェイスを簡単にするために、メモリは最初から読み取られ、画像は左上(最小メモリアドレス)から右下(最大メモリアドレス)に描画されました。

拡張機能(コメントに基づく)

CRTは、当時利用可能であったアナログテレビセットに基づいています。

テレビセットは最初に左から右へ、そして上から下へ一行ずつ画像を作成します。この理由は、西欧諸国の書体にのみ基づいていると考えられます。


7
確かに、なぜCRTは左から(観客から見て)描画するのですか?なぜ垂直ではないのですか?なぜ右から左にしないのですか?なぜ下から上にしないのですか?
パンダパジャマ14

1
CRTのイメージ作成については、こちらをご覧ください。基本的にこれはアナログテレビ用ですが、コンピューター用のCRTにも同じ技術があります。
ウーヴェPlonus

12
@PandaPajamaコンピューターCRTがそれを行うのは、それがアナログTV標準の方法であり、当初は家庭用コンピューターでは専用モニターの代わりにTVが使用されることが多かったためです。最初のテレビがスキャンラインに情報を分割し、スキャンラインを左から右に描画することで情報を送信した理由-私は確信していませんが、それは私たちが書く方法と一致するので、任意のオプションを選択する十分な理由かもしれません。
ペティス14

2
@Peteris:ヨーロッパ人の書き方
Mooing Duck 14

1
技術的には、CRTはステージの右上からステージの左下に描画します。
ps2goat 14

3

これは私が何度も考えてきた素晴らしい質問です。「理由」に対する簡単な答えは、TVフォーマットも左から右、上から下に線を引いたためです。元のコンピューターモニターはCRT画面(小型テレビ)だったため、フォーマットは当然同じままでした。モニターがフラットスクリーンになったとき(およびテレビもフラットスクリーンになったとき)、互換性を簡単にするために同じフォーマットを維持することも同様に自然でした。

もちろん、あなたは尋ねることができます:なぜテレビはこのように描くのですか?それらは20世紀初頭に発明されたので、質問されたとしても、その考えやその欠如がデザインにどの程度含まれているか想像できます。注:小さな「電球」の単純なマトリックスとは対照的に、画面上の適切な線に光線を磁気的に偏向する方程式を取得することは非常に難しいため、失礼になることを意図していません。(この種の単純なドットマトリックスの前に、20世紀初頭に地球上でCRTがどのように発明されたのかという疑問が生じます。)

それにもかかわらず、西洋の言語は左から右、上から下に単語を書くので、おそらくそれは疑問視されなかった(悪いこと)と思います。おそらく、それを違うやり方で行う可能性を誰も思いつかなかったでしょう。

個人的に、私はこの形式が嫌いです。ゲームや楕円軌道を含むその他のシミュレーションをプログラムするときに、この姿勢を身につけました。sin、cos、またはtanを含む描画式を調べるときは常に、y軸パラメーターを扱う記号を慎重に反転させる必要があります。そうしないと、間違ったものが描画されます。例は、任意の2D角度で描かれた楕円のパラメトリック方程式です。それは、罪の罪、罪の罪、および同様のものを切り裂く本当の悪夢でありえます。

簡潔に数学的に言えば、画面は象限1ではなく象限4にあります。これは不必要に複雑です。

ところで、3次元に到達すると、z軸は正の方向に「上方に」移動すると見なされます。ちょっと皮肉。[編集]:たぶん、以下の私のコメントを参照してください。

私が気づいた/見つけた2つのこと:

北半球の日時計(北向きのポインターとディスクが地面に平行)は常に時計回りに回転します。したがって、「時計の文字盤」の上部にゼロアワーを配置すると、シャドウポインターが右に移動し始めます。これは、デカルト座標とテレビ/コンピューター画面まで伝播する、西洋言語の左から右への方向の起源である可能性があります。

古いコンピューターは、グラフィカルオブジェクトをそれほど描画しませんでした。彼らはコマンドプロンプトにテキストを描いた。そのため、行0をy = 0に置くのが自然です。左下に原点がある場合、テキスト行を描く数学はもう少し複雑になり、古い低速のコンピューターには大きな影響を与える可能性があります(1ずつインクリメントするためのショートカットを作成しました。 「++」と呼ばれます)。さらに、画面の解像度を知る必要がありますが、y = 0で行0を実行するだけであれば、解像度を知る必要はありません。


2
20世紀初頭にネアンデルタール人が住んでいたように聞こえます;)
bummzack 14

1
ああ、私はちょうどCRTとLEDマトリックスの複雑さの際立ったコントラストを強調しようとしていました。CRTには、光線の磁気偏向に関する驚くほど複雑な数学があります。ドットマトリックスは、頭を包み込むのが簡単です。適切なタイミングで適切なLEDに電流を流すだけです。どちらかといえば、このより大きな複雑さの大きさは、20世紀初頭にはもっと多くの天才が住んでいたことを示唆しています。
DrZ214 14

LEDマトリックス情報を表示するために使用されましたが、テレビやコンピューターモニターでは一般的になりませんでした。最新のフラットスクリーンはLEDマトリックスではなく、バックライト付きLCDです。LEDは一部の画面のバックライトに使用されるだけですが、画像はLEDによって作成されません。LCDは簡単な手法ですが、古い時計のディスプレイの解像度を画面全体で数百または数千ピクセルに改善すること(さらに、色を追加するために3つのサブピクセルが必要な場合もあります!)は、必ずしも波信号を変調するよりも簡単ではありませんEMビームの制御(ラジオ放送に匹敵する方法)
エルケレンズ14

Z軸を上げることは皮肉ではなく、数学です。座標系は右回りである必要があるため、+ Xが右側にあり、+ Yが画面内にある場合、+ Zになります。+ Xを右に、+ Yを下にした場合と同様に、+ Zが画面に入ります。
tpg2114

1
@ tgp2114なぜ座標系を右利きにする必要があるのですか?
Taemyr

3

補遺:初期のグラフィックスはベクトルモニターで行われ、ラボで見られるオシロスコープからわずか1ステップ上で、(0,0)が画面の正確な中央にあり、ノブを回してX / Yスケール、Xを設定します/ Yオフセット、および場合によってはX / Y反転。

たとえば、Atari "Asteroids"(1979)の専用ハードウェアはベクトルスクリーンを使用しました。プログラムの座標系が何であるかを知ることは興味深いでしょう。

Ivan Sutherlandの「Sketchpad」システム(1963)はTX-2ベクトルディスプレイに基づいており、「Sketchpad:A-Machine Graphical Communication System」(博士論文、1963年1月)で70ffページに次のように書いています。

TX-2ディスプレイシステムの座標系は、スコープの中心に原点を持ち、各軸の18ビットコンピューターサブワードの左側にある10ビットの偏向情報を必要とします。

...

多くのコンポーネント変数を表現しやすく、18ビット以上の精度を実現するため、Sketchpadは表示システムに必要な表現とは異なる表現を描画するために内部座標系を使用します。この内部システムは「ページ」座標系と呼ばれます。Sketchpadの図面を考えると、ページ座標は固定されていると見なされます。スコープからページへの変換は、拡大鏡を介しているかのように、ページの任意の部分を任意の倍率でスコープ上に表示する機能を提供します(...)ディスプレイのスケール係数は、スコープに表示されます。実際に保存される数値は、図5.2に示すように、SCope SiZeのSCSZと呼ばれる正方形の辺の半分の長さです。スコープ正方形の中心のページ座標も保存されます。これらの数値を変更すると、スコープに表示されるページの部分のサイズが変更され、移動されますが、回転はできません。

73ページの図5.2は、「ページ座標系」がX / Yデカルト座標系の数学規則を使用していることを示しています。(その慣習がそうである理由を尋ねるかもしれません...)


しかし:メモリは(ポリゴン対ボクセルのような)はるかに少ないメモリを必要とするプレゼンテーション時間+接続+全体表示可能な画像とベクトルのリストを表現するにはあまりにも稀であったため、ベクトル画面のみに使用された
Micka

2

すべてが左上にあるわけではありません。

たとえば、OpenGLは、原点が左下にあることを指定します。これは、API全体に広がります:テクスチャ座標、ビューポート、テクセル長方形、標準のオルソ投影:左下全体です。

ここでの考え方には違いがあります。

本のように、コンピューター画面上で、人々が読むとき(そして、ここでは英語のような言語を想定している)、左から右、上から下に読みます。この質問を書いたときに自分でやったのですが、答えを読んでいるときにやっています。

数学と設計では、グラフをプロットするときに、X軸とY軸があり、正のXが左に、正のYが上になります。

ゲームで2D GUIのようなものを構築する場合、多くの人にとって「左上が原点」の方法でレイアウトする方が簡単で直感的です。

グラフ用紙にデザインやレイアウトを模倣するものを作成する場合、多くの人々にとって「左下が原点」の方法でレイアウトする方が簡単で直感的です。

実際、これらはどちらも非常に非公式の慣習であり、正射投影を設定する場合は、正のXが左右に移動し、正のXが画面の任意のポイント(またはオフ)に原点を持つように選択できます。 Yは上下します。それに応じて投影行列を調整するだけです。

したがって、唯一の重要なことは、使用する規則を選択し、一貫して使用することです。


素晴らしい答え。私は最終的に画面上に物事が描かれるようになる大量の三角法でアルゴリズムを作成していますが、y軸を正にすることでタブーや慣習を壊しているかどうかは本当に不確かでした。
アレクサンダー・ホースト

-1

画面は左上隅から画像のレンダリングを開始するため。(0,0,0)が左上隅にあり、+ Y軸が画面に入るときに、座標軸のレンダリングまたは描画を相互に関連付ける方が簡単です。


-2

引数FOR:(例による)

var R uint32 = 0xFF0000FF; //:Red pixel
var W uint32 = 0xFFFFFFFF; //:White Pixel.
var Pixels []uint32 = { 
W,W,W,R,R,W,W,W,
W,W,R,R,R,R,W,W,
W,R,R,R,R,R,R,R,
W,W,W,R,R,W,W,W,   //:8x8 pixel image of " ↑ "
W,W,W,R,R,W,W,W,
W,W,W,R,R,W,W,W,
W,W,W,R,R,W,W,W,
W,W,W,R,R,W,W,W, }

画面上のコードと一致する結果

enter image description here

左上の原点を使用しなかっ場合、赤い矢印は上下逆になります。

これが「なぜ」かどうかはわかりません。まさに、それが左上の起源の正当な理由です。


2
「左上の原点を使用しなかった場合、赤い矢印は上下逆になります」そうですね。ゲーム開発者は、ほとんどの場合、コードの2D配列を介してグラフィックスを記述しますか?
ベイランクール

すべてのゲーム開発者のために話すことはできません。私がやる:newgrounds.com/portal/view/706067 Adam Atomicも同様に、flixelのソースコードを読んでいます。OpenGLとSFMLライブラリは間違いなくそうです。OpenCLでは、データポイントをX / Yに抽象化できます(get_global_id(dim))が、初期メモリ割り当ては1Dです。
Jマディソン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.