Bilgisayar grafikleri orijini neden sol üstte?


36

Gördüğüm kadarıyla hemen hemen her şey (0, 0) sol üstte ve pozitif Y-ekseninin ekranınızın aşağı yönünde gittiği koordinatları kullanıyor.

Neden böyle? Neden geleneksel pozitif Y ekseni basit matematik derslerinde grafiklerde gösterildiği gibi yukarı doğru gitmiyor?


7
Yukarıdan başlayıp aşağı indikçe artmanın, indo-avrupa dillerinin okunduğu ve yazılması ile daha yakından ilişkili olduğu için matematiksel sözleşmeden daha anlamlı olduğunu savunuyorum.
Panda Pajama

3
Y + 'nın fiziksel cisimler çizilirken, zemin sizin kökeniniz ve dünyanızın çoğu zemin üstünde olduğu için anlamlı olduğunu düşünüyorum. Ancak, görüntüler için, Avrupa-Avrupa dillerinin yazılma şeklini taklit etmekle ilgili olduğunu varsayıyorum.
Panda Pajama


4
OpenGL'nin normalize edilmiş cihaz koordinatlarının yukarı doğru bir Y ekseni yok mu?
Ray

1
Yani esasen “Kökenin kökeni nedir?” Diye soruyorsunuz?
Ken

Yanıtlar:


42

Bu tarihe sebep olur. İlk bilgisayarlarda, görüntüyü sol üst köşeden sağ alt köşeye katod ışınıyla "çizen" Katot Işın Tüpleri (CRT'ler) vardı.

Grafik kartı hafızası ve CRT arasındaki arayüzü kolaylaştırmak için hafıza en baştan okundu ve görüntü sol üstten (en düşük hafıza adresli) alt sağa (en yüksek hafıza adresli) çekildi.

Uzantı (yorumlara dayanarak)

CRT'ler, o sırada mevcut olan analog TV setlerini temel almaktadır.

TV setleri, görüntüyü önce soldan sağa ve sonra yukarıdan aşağıya doğru sırayla oluşturur . Bunun sebebinin ancak Batı ülkelerinde yazılı bir tarza dayandığı varsayılabilir.


7
Tabii, fakat CRT'ler neden sol üst taraftan çekiyor (izleyiciden bakılıyor)? Neden dikey değil? Neden sağdan sola değil? Neden aşağıdan yukarıya değil?
Panda Pajama

1
Bir CRT'nin resim oluşturmasını burada bulabilirsiniz . Temelde bu analog televizyon içindir, ancak bir bilgisayar için bir CRT aynı teknolojiye sahiptir.
Uwe Plonus

12
@PandaPajama bilgisayar CRT'leri bunu yapar çünkü analog TV standartları böyledir ve başlangıçta ev bilgisayarları için sıklıkla özel monitörler yerine TV'ler kullanılır. Neden ilk TV'ler bunu tarama satırlarına bölerek ve tarama satırlarını soldan sağa doğru çizerek bilgi ilettiler - Emin değilim, ancak yazış biçimimizle tutarlı olacaktır, bu nedenle keyfi seçenekler arasında seçim yapmak için yeterince iyi bir neden olabilir.
Peteris

2
@Peteris: yönlü Avrupalılar yazma
Ördek mölemeye

1
Teknik olarak, CRT Aşama Üst Sağdan Aşama Alt Sol'a çeker.
ps2goat

3

Bu defalarca düşündüğüm harika bir soru. “Neden” e verilen basit cevap, TV formatlarının çizgilerini soldan sağa ve yukarıdan aşağıya doğru çektiğindendir. Orijinal bilgisayar monitörleri CRT ekranlarıydı (küçük TV'ler), bu nedenle format doğal olarak aynı kaldı. Monitörler düz ekranlar haline geldiğinde (ve TV'ler de düz ekranlar haline geldiğinde), aynı formatın kolay uyumluluk için korunması aynı derecede doğaldı.

Elbette sorabilirsiniz: TV'ler neden bu şekilde çiziliyor? 20. yüzyılın başlarında icat edildiler, böylece sorguya çekilse bile tasarıma ne kadar düşünce veya eksiklik geldiğini tahmin edebilirsiniz. Not: Basit bir minik "ampul" matrisinin aksine, ışınları manyetik olarak saptırmak için denklemleri ekrandaki uygun çizgilere çekmek için inanılmaz derecede zor olduğu için saygısızlık etmek değildir. (Bu tür, 20. yüzyılın başlarında, basit nokta matrisinden önce Dünya'ya nasıl CRT icat ettikleri sorusunu gündeme getirdi?)

Yine de, benim tahminim, Batı dilleri soldan sağa ve yukarıdan aşağıya kelimeler yazdığı için muhtemelen hiçbir zaman sorgulanmadı (kötü bir şey). Muhtemelen hiç kimse bunu farklı yapma olasılığını düşünmedi.

Şahsen ben bu formattan hoşlanmıyorum. Eliptik yörüngeleri içeren oyunları ve diğer simülasyonları programladığım için bu tutumu kazandım. Ne zaman günah, cos veya tan içeren denklemler çizdiğiniz zaman, y ekseni parametreleriyle ilgili işaretleri dikkatlice tersine çevirmelisiniz ... yoksa yanlış olanı çizersiniz. Bir örnek, herhangi bir 2D açıyla çizilen bir elips için parametrik denklemler olabilir. Günah günahını, günah cos'u ve benzer şeyleri özümsemek gerçek bir kabus olabilir .

Kısaca matematiksel olarak konuşursak , ekran Çeyrek 1 yerine Çeyrek 4'tür. Bu gereksiz yere karmaşıktır.

BTW, 3 boyuta ulaştığınızda, z ekseninin pozitif yönde "yukarı" gittiği kabul edilir. Biraz ironik. [EDIT]: Belki hayır, yorumumu aşağıya bakınız.

Gerçekleştirdiğim / rastladığım 2 şey daha:

Kuzey yarımkürede bulunan güneş saatleri (kuzeye bakan işaretçiler ve yere paralel diskler vardır) daima saat yönünde döner . Böylece sıfır saatini "saat yüzünün" üstüne koyarsak, gölge imleci sağa doğru hareket etmeye başlar. Bu, batı dillerinde soldan sağa doğru, Kartezyen koordinatlarına ve TV / bilgisayar ekranlarına yayılan kaynak olabilir.

Eski bilgisayarlar grafiksel nesneler fazla çizmediler. Komut istemine metin çizdiler. Bu nedenle, 0 satırını y = 0 değerine koymak doğaldır. Sol alttan bir kökene sahip olsaydık, metin çizgileri çizme matematiği biraz daha fazla etkilenecekti ve bu eski yavaş bilgisayarlar için çok büyük bir sorun olabilirdi (hatta 1’lik artış için bir kestirmeden, iyilik aşkına, denilen "++"). Artı, ekranın çözünürlüğünü bilmeniz gerekir, oysa sadece 0 = y satırında 0 yaparsanız çözünürlüğü bilmeniz gerekmez.


2
20. yüzyılın başlarında Neandertaller tarafından
doluydu

1
Ben sadece CRT'ler ile bir LED matrisi arasındaki karmaşıklıktaki keskin kontrastı vurgulamaya çalışıyordum. CRT'ler, ışık ışınlarının manyetik sapmasına katılan şaşırtıcı bir matematiğe sahiptir. Bir nokta vuruşlu, kafanızı sarmak için çok daha kolaydır: doğru zamanda doğru LED'lere elektrik akımı göndermeniz yeterlidir. Bir şey varsa, bu büyük karmaşıklığın büyüklüğü, 20. yüzyılın başlarının daha sınırlı bir dönemde daha karmaşık bir şey yapmak zorunda kaldıklarından, daha fazla veya daha iyi dahiler tarafından doldurulduğunu göstermektedir.
DrZ214

LED-matrisler edildi bilgilerini görüntülemek için kullanılan, bunlar TV ve bilgisayar monitörleri için popüler olamamıştı. Modern düz ekranlar LED matrisler değil, arkadan aydınlatmalı LCD'dir. LED'ler yalnızca bazı ekranlarda arka aydınlatma için kullanılır, ancak görüntü LED'ler tarafından oluşturulmaz. LCD basit bir tekniktir, ancak eski saat ekranından çözünürlüğü ekran boyunca yüzlerce veya binlerce piksele yükseltmek (ve daha sonra bazıları için renk eklemek için üç alt piksele ihtiyaç duyduğunuzdan!) Bir dalga sinyalini modüle etmekten daha kolay değildir EM ışınını kontrol etme (radyo yayıncılığına benzeyen bir şekilde)
oerkelens

Z ekseni yukarı ironik değil - matematik. Koordinat sisteminin sağ elini kullanması gerekir, bu nedenle + X sağa doğru ve + Y ekranın içindeyse, + Z'yi oluşturur. Tıpkı + X'i sağda tutarsak, + Y aşağı, + Z ekrana geliyor.
tpg2114

1
@ tgp2114 Neden koordinat sisteminin sağ ele alınması gerekiyor?
Taemyr

3

Zeyilname: Erken grafik üzerinde yapıldı vektör monitörler nerede laboratuvarda (0,0) görülen osiloskop sadece bir adım yukarı ekranın tam ortasında olurdu, bazı düğme tabi kümesi X / Y skalası X dönüm / Y ofset ve muhtemelen X / Y inversiyonu.

Örneğin , Atari “Asteroids” in (1979) özel donanımı bir vektör ekranı kullandı; program koordinat sisteminin ne olduğunu bilmek ilginç olurdu.

Ivan Sutherland'ın "Eskiz defteri" sistemi (1963), bir TX-2 vektör göstergesine dayanıyordu ve "Eskiz defteri: Bir İnsan-Makine Grafik İletişim Sistemi" (Doktora tezi, Ocak 1963), sayfa 70'de yazıyor:

TX-2 görüntüleme sisteminin koordinat sistemi, kapsamın merkezinde yer almaktadır ve her eksen için 18 bit bilgisayar alt anahtarının solunda bulunan on bitlik sapma bilgisi gerektirir.

...

Birçok bileşen değişkenini temsil etmede kolaylık sağlamak ve 18 bitin üzerinde hassasiyet için, Sketchpad, görüntüleme sisteminin gerektirdiği gösterimlerden ayrılan gösterimi çizim için dahili bir koordinat sistemi kullanır. Bu iç sisteme "sayfa" koordinat sistemi denir. Sketchpad'deki çizimleri düşünürken, sayfa koordinatları sabit olarak kabul edilir. Kapsam dönüşümü sayfası, kapsamda istenen sayfanın herhangi bir bölümünü, herhangi bir büyütme derecesinde, bir büyüteç camı (...) gibi sanki görüntüleme kabiliyetini verir. kapsamda görünecektir. Kaydedilen gerçek sayı, Şekil 5.2'de gösterildiği gibi karenin kenarının yarı uzunluğudur, SCope SiZe için SCSZ). Ayrıca, kapsam karesinin merkezinin sayfa koordinatları da kaydedilir. Bu sayıları değiştirerek, kapsamda gösterilen sayfanın kısmı boyut olarak değiştirilebilir ve taşınabilir, ancak döndürülemez.

Sayfa 73'teki Şema 5.2, "sayfa koordinat sistemi" nin X / Y kartezyen koordinat sisteminin matematiksel kuralını kullandığını göstermektedir. (Bir kişi bu sözleşmenin neden böyle olduğunu sorabilir ...)


ancak: vektör ekranları yalnızca bellek görüntülenebilir bir görüntüyü temsil etmek için çok nadir olduğundan ve vektör listelerini kullandıklarında + sunum süresi + bağlantılarında çok daha az bellek gerekir (çokgenler ve vokseller gibi)
Micka

2

Her şey sol üstte değil.

Örneğin, OpenGL, orijinin en altta olduğunu ve bunun API boyunca yaygın olduğunu belirtir : doku koordinatları, görünüm portları, doku dikdörtgenleri, standart orto projeksiyonu: en altta.

Burada düşünmenin bir farkı var.

Bilgisayar ekranlarında, kitaplarda olduğu gibi, insanlar okuduğunda (ve burada İngilizce gibi bir dil varsayarım) soldan sağa ve yukarıdan aşağıya okurlar. Bu soruyu yazdığınızda kendiniz yaptınız ve cevapları okurken bunu yapıyorsunuz.

Bir grafiği çizdiğinizde matematik ve tasarımda, X'in sola ve pozitif Y'nin yukarı çıkacağı bir X ve Y ekseni vardır.

Bir oyunda 2D GUI gibi bir şey inşa ediyorsanız, birçok insan için "sol üst kaynaktır" şeklinde yerleştirmek daha kolay ve sezgisel olabilir.

Grafik kağıdına bir tasarım veya yerleşimi taklit edecek bir şey inşa ediyorsanız, birçok insan için "sol alt kaynaktır" şeklinde yerleştirmek daha kolay ve sezgisel olabilir.

Aslında bunların ikisi de gayrı resmi sözleşmelerdir ve bir orto projeksiyonu kurarsanız, menşeinizi ekran üzerinde herhangi bir isteğe bağlı noktaya (veya kapalı) bırakmayı seçebilirsiniz; artı X sola veya sağa veya sola Y yukarı ya da aşağı gidiyor. Bu sadece projeksiyon matrisinizi buna göre ayarlamaktan ibarettir.

Bu nedenle önemli olan tek şey, hangi sözleşmeyi kullanacağınızı seçmek ve tutarlı bir şekilde kullanmaktır.


Mükemmel cevap. Sonunda ekranda çizilen nesnelere yol açacak tonlarca trigonometri ile bir algoritma oluşturuyorum ve y-ekseni pozitif çıkınca biraz tabu veya kongre bozup kırmadığım konusunda gerçekten emin değildim.
Alexander Høst

-1

Çünkü ekranlar görüntüyü sol üst köşeden oluşturmaya başlar. (0,0,0) sol üst köşedeyken + Y ekseni ekrana giderken koordinat ekseninin oluşturulmasını veya çizilmesini çizmek daha kolay olacaktır.


-2

FOR argümanı: (Örnek olarak)

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, }

Kod ekrandaki sonuçlarla eşleşiyor :

görüntü tanımını buraya girin

Sol üst menşei kullanmazsanız kırmızı ok ters olur.

Bunun "neden" olup olmadığını söyleyemem. Sadece bu, sol üst menşe için iyi bir neden.


2
"Sol üst menşei kullanmazsanız kırmızı ok ters olur" Evet, öyle mi? Oyun geliştiricileri çoğu zaman kod içindeki 2d dizileriyle grafik yazıyor mu?
Vaillancourt

Tüm oyun geliştiricileri için konuşamam. Yaptığım: newgrounds.com/portal/view/706067 Adam Atomic, flixel'in kaynak kodunu okumaktan da hoşlanıyor. OpenGL ve SFML kütüphaneleri kesinlikle var. OpenCL, veri noktalarını X / Y, (get_global_id (dim)) şeklinde özetleyebilmenizi sağlar, ancak ilk bellek ayırımı 1D'dir.
J MADISON
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.