ทำไมจุดกำเนิดในพิกัดคอมพิวเตอร์กราฟิกที่ด้านบนซ้าย?


36

จากสิ่งที่ฉันได้เห็นเกือบทุกอย่างใช้พิกัดโดยที่ (0, 0) อยู่ที่มุมบนซ้ายและแกน Y บวกไปในทิศทางลงของหน้าจอของคุณ

ทำไมถึงเป็นเช่นนี้ ทำไมแกน Y เชิงบวกแบบบวกไม่เพิ่มขึ้นอย่างที่แสดงในกราฟในคลาสคณิตศาสตร์อย่างง่าย


7
ฉันจะยืนยันว่าการเริ่มต้นที่ด้านบนและเพิ่มขึ้นเมื่อคุณลงไปทำให้รู้สึกมากกว่าแบบแผนทางคณิตศาสตร์เนื่องจากมันเกี่ยวข้องกับวิธีการอ่านและเขียนภาษาอินโด - ยูโรเปียนอย่างใกล้ชิดมากขึ้น
แพนด้า Pajama

3
ฉันคิดว่า Y + up นั้นสมเหตุสมผลเมื่อวาดวัตถุทางกายภาพเนื่องจากพื้นดินเป็นจุดกำเนิดของคุณและโลกส่วนใหญ่ของคุณอยู่เหนือพื้นดิน อย่างไรก็ตามสำหรับการจัดแสดงฉันตั้งสมมติฐานว่ามันเกี่ยวข้องกับการเลียนแบบวิธีการเขียนภาษาอินโด - ยูโรเปียน
แพนด้า Pajama


4
พิกัดอุปกรณ์ธรรมดาของ OpenGL ไม่มีแกน Y ขึ้นไปหรือไม่
Ray

1
ดังนั้นคุณจึงถามว่า "ต้นกำเนิดของต้นกำเนิดคืออะไร"
เคน

คำตอบ:


42

สิ่งนี้เกิดขึ้นในประวัติศาสตร์ คอมพิวเตอร์ยุคแรก ๆ มี Cathode Ray Tubes (CRTs) ซึ่ง "วาด" ภาพด้วยรังสีแคโทดจากมุมซ้ายบนไปทางขวาล่าง

เพื่อความสะดวกในการเชื่อมต่อระหว่างหน่วยความจำกราฟิกการ์ดและ CRT หน่วยความจำถูกอ่านตั้งแต่ต้นและภาพถูกดึงจากด้านบนซ้าย (ที่อยู่หน่วยความจำต่ำสุด) ไปทางขวาล่าง (พร้อมที่อยู่หน่วยความจำสูงสุด)

ส่วนขยาย (ตามความคิดเห็น)

CRT จะขึ้นอยู่กับชุดทีวีอะนาล็อกที่มีอยู่ในขณะนั้น

ชุดทีวีสร้างเส้นภาพโดยบรรทัดแรกจากซ้ายไปขวาและจากบนลงล่าง เหตุผลนี้สามารถสันนิษฐานได้ว่าเป็นไปตามสไตล์การเขียนในบทความตะวันตก


7
แน่นอน แต่ทำไม CRT ถึงมาจากมุมบนซ้าย (ดูจากผู้ชม) ทำไมไม่ลองในแนวตั้ง? ทำไมไม่จากขวาไปซ้าย ทำไมไม่จากล่างขึ้นบน
แพนด้า Pajama

1
คุณสามารถค้นหาการสร้างภาพของจอ CRT ที่นี่ โดยทั่วไปจะใช้สำหรับโทรทัศน์อะนาล็อก แต่ CRT สำหรับคอมพิวเตอร์มีเทคโนโลยีเดียวกัน
Uwe Plonus

12
@PandaPajama คอมพิวเตอร์ CRT ทำเพราะนั่นเป็นวิธีมาตรฐานทีวีแอนะล็อกและในตอนแรกสำหรับคอมพิวเตอร์ที่บ้านมักจะใช้ทีวีแทนจอภาพพิเศษ ทำไมทีวีแรกส่งข้อมูลโดยแบ่งเป็น scanlines และ drawinglines จากซ้ายไปขวา - ฉันไม่แน่ใจ แต่นั่นจะสอดคล้องกับวิธีที่เราเขียนดังนั้นอาจเป็นเหตุผลที่ดีพอที่จะเลือกระหว่างตัวเลือกโดยพลการ
Peteris

2
@Peteris: วิธีที่ชาวยุโรปเขียน
Mooing Duck

1
ในทางเทคนิคแล้ว CRT จะดึงจากบนเวทีขวาไปจนถึงล่างซ้ายเวที
ps2goat

3

นี่เป็นคำถามที่ยอดเยี่ยมที่ฉันคิดหลายครั้ง คำตอบง่ายๆสำหรับ "ทำไม" เป็นเพราะรูปแบบทีวีดึงเส้นจากซ้ายไปขวาและจากบนลงล่าง จอภาพคอมพิวเตอร์ดั้งเดิมคือหน้าจอ CRT (ทีวีขนาดเล็ก) ดังนั้นรูปแบบจึงยังคงเหมือนเดิม เมื่อจอภาพกลายเป็นจอแบน (และทีวีก็กลายเป็นจอแบนด้วย) มันเป็นเรื่องธรรมดาพอ ๆ

แน่นอนคุณสามารถถาม: ทำไมทีวีถึงวาดด้วยวิธีนี้ พวกเขาถูกประดิษฐ์ขึ้นในช่วงต้นศตวรรษที่ 20 เพื่อให้คุณสามารถจินตนาการได้ว่ามีความคิดหรือการขาดหายไปในการออกแบบหากมีการตั้งคำถาม หมายเหตุ:ไม่ได้หมายความว่าจะดูหมิ่นเพราะมันเป็นเรื่องที่ท้าทายยิ่งกว่าที่จะได้รับสมการสำหรับสนามแม่เหล็กที่เบี่ยงเบนรังสีไปยังเส้นที่เหมาะสมบนหน้าจอเมื่อเทียบกับเมทริกซ์ง่ายๆของ (ชนิดนี้ทำให้เกิดคำถามว่าพวกเขาคิดค้น CRT บนโลกได้อย่างไรก่อนเมทริกซ์จุดง่ายย้อนกลับไปในช่วงต้นศตวรรษที่ 20?)

อย่างไรก็ตามฉันเดาว่าอาจจะไม่เคยถูกถาม (เรื่องเลวร้าย) เนื่องจากภาษาตะวันตกเขียนคำจากซ้ายไปขวาและจากบนลงล่าง อาจไม่มีใครรู้สึกถึงความเป็นไปได้ที่จะทำมันแตกต่างกัน

โดยส่วนตัวแล้วฉันไม่ชอบรูปแบบนี้ ฉันได้รับทัศนคตินี้เมื่อฉันตั้งโปรแกรมเกมและการจำลองอื่น ๆ ที่เกี่ยวข้องกับวงโคจรรูปไข่ เมื่อใดก็ตามที่คุณค้นหาสมการการวาดที่เกี่ยวข้องกับบาป cos หรือผิวสีแทนคุณจะต้องย้อนกลับสัญญาณที่เกี่ยวข้องกับพารามิเตอร์แกน y อย่างระมัดระวัง ... หรือคุณจะได้รับสิ่งผิดปกติ ตัวอย่างจะเป็นสมการอิงพารามิเตอร์สำหรับวงรีที่วาดที่มุม 2D ใด ๆ มันอาจเป็นฝันร้ายที่แท้จริงที่ตัดความบาปบาปบาปและสิ่งต่าง ๆ ที่คล้ายกัน

พูดอย่างชัดเจนในแง่คณิตศาสตร์หน้าจออยู่ใน Quadrant 4 แทนที่จะเป็น Quadrant 1ซึ่งมีความซับซ้อนเกินความจำเป็น

BTW เมื่อคุณไปถึง 3 มิติแกน z จะพิจารณาว่า "ขึ้นไป" ในทิศทางที่เป็นบวก แดกดัน [แก้ไข]: อาจจะไม่เห็นความคิดเห็นของฉันด้านล่าง

อีกสองสิ่งที่ฉันรู้ / เจอ:

นาฬิกาแดดในซีกโลกเหนือ (ที่มีพอยน์เตอร์และดิสก์ที่หันหน้าไปทางทิศเหนือขนานกับพื้นดิน) หมุนตามเข็มนาฬิกาเสมอ ดังนั้นถ้าเราใส่ศูนย์ชั่วโมงที่ด้านบนของ "หน้าปัดนาฬิกา" จากนั้นตัวชี้เงาเริ่มขยับไปทางขวา นี่อาจเป็นที่มาของทิศทางจากซ้ายไปขวาในภาษาตะวันตกแพร่กระจายไปยังพิกัดคาร์ทีเซียนและหน้าจอทีวี / คอมพิวเตอร์

คอมพิวเตอร์เก่าไม่ได้วาดวัตถุกราฟิกมากนัก พวกเขาดึงข้อความในพร้อมท์คำสั่ง ดังนั้นจึงเป็นเรื่องธรรมดาที่จะใส่บรรทัด 0 ที่ y = 0 ถ้าเรามีต้นกำเนิดจากซ้ายล่างคณิตศาสตร์ของการวาดเส้นข้อความจะมีส่วนเกี่ยวข้องเพิ่มขึ้นเล็กน้อยและมันอาจเป็นเรื่องใหญ่สำหรับคอมพิวเตอร์ที่ช้าเครื่องเก่า ๆ เรียกว่า "++") นอกจากนี้คุณต้องทราบความละเอียดของหน้าจอในขณะที่ถ้าคุณทำบรรทัดที่ 0 ที่ y = 0 คุณไม่จำเป็นต้องรู้ความละเอียด


2
คุณทำให้มันฟังดูเหมือนต้นศตวรรษที่ 20 มีประชากรโดย Neanderthals;)
bummzack

1
อ๊ะฉันกำลังพยายามเน้นความแตกต่างของความซับซ้อนระหว่าง CRT และเมทริกซ์ของ LED CRT มีคณิตศาสตร์ที่ซับซ้อนอย่างน่าอัศจรรย์ที่เกี่ยวข้องกับการเบี่ยงเบนทางแม่เหล็กของแสง ดอทเมทริกซ์เป็นวิธีที่ง่ายต่อการห่อหัวของคุณไปรอบ ๆ : เพียงแค่ส่งกระแสไฟฟ้าไปยัง LED ที่ถูกต้องในเวลาที่เหมาะสม หากมีสิ่งใดความซับซ้อนที่ยิ่งใหญ่นี้แสดงให้เห็นว่าต้นศตวรรษที่ 20 นั้นมีอัจฉริยะที่มากขึ้นหรือดีขึ้นเนื่องจากพวกเขาต้องทำสิ่งที่ซับซ้อนมากขึ้นในยุคที่ จำกัด มากขึ้น
DrZ214

เมทริกซ์ LED ถูกนำมาใช้เพื่อแสดงข้อมูลพวกเขาไม่เคยได้รับความนิยมสำหรับทีวีและจอคอมพิวเตอร์ หน้าจอแบนที่ทันสมัยไม่ใช่เมทริกซ์ LED แต่เป็น backlit LCD ไฟ LED ใช้สำหรับแบ็คไลท์ในบางหน้าจอ แต่ภาพไม่ได้สร้างโดยไฟ LED LCD เป็นเทคนิคง่าย ๆ แต่การปรับปรุงความละเอียดจากจอแสดงผลนาฬิกาเก่าเป็นหลายร้อยหรือหลายพันพิกเซลผ่านหน้าจอ (และบางอย่างตามที่คุณต้องการ subpixels สามเพื่อเพิ่มสี!) ไม่จำเป็นต้องง่ายกว่าการปรับสัญญาณคลื่น การควบคุมลำแสง EM (ซึ่งเป็นวิธีที่เทียบเคียงได้กับวิทยุกระจายเสียง)
oerkelens

แกน Z ไม่ได้เป็นเรื่องน่าขัน - เป็นคณิตศาสตร์ ระบบพิกัดต้องอยู่ทางขวามือดังนั้นหาก + X อยู่ทางขวาและ + Y เข้าสู่หน้าจอนั่นจะทำให้ + Z ขึ้น เช่นถ้าเรารักษา + X ไปทางขวา + Y ลง + Z จะเข้าสู่หน้าจอ
tpg2114

1
@ tgp2114 เหตุใดระบบพิกัดจึงจำเป็นต้องใช้มือขวา
Taemyr

3

ภาคผนวก: กราฟิกก่อนหน้านี้ถูกสร้างขึ้นบนจอภาพแบบเวกเตอร์เพียงหนึ่งก้าวจากออสซิลโลสโคปที่เห็นในห้องแล็บซึ่ง (0,0) จะอยู่ตรงกลางของหน้าจอขึ้นอยู่กับปุ่มหมุนบางอันเพื่อตั้งระดับ X / Y, X / Y ชดเชยและอาจกลับ X / Y

ฮาร์ดแวร์เฉพาะของ Atari "Asteroids" (1979) ยกตัวอย่างเช่นใช้หน้าจอแบบเวกเตอร์ มันจะน่าสนใจที่จะรู้ว่ามันคิดว่าระบบพิกัดของโปรแกรมคืออะไร

ระบบ"Sketchpad"ของ Ivan Sutherland (1963) ใช้จอแสดงผลแบบเวกเตอร์TX-2และใน"Sketchpad: ระบบการสื่อสารด้วยกราฟิคMan-Machine" (วิทยานิพนธ์ปริญญาเอก, มกราคม 1963) เขาเขียนลงในหน้า 70ff:

ระบบพิกัดของระบบการแสดงผล TX-2 มีจุดกำเนิดที่กึ่งกลางของขอบเขตและต้องการข้อมูลการเบี่ยงเบนสิบบิตซึ่งอยู่ทางด้านซ้ายของซับบิตคอมพิวเตอร์ 18 บิตสำหรับแต่ละแกน

...

เพื่อความสะดวกในการเป็นตัวแทนของตัวแปรส่วนประกอบจำนวนมากและเพื่อความแม่นยำมากกว่า 18 บิต Sketchpad ใช้ระบบพิกัดภายในสำหรับการแสดงการวาดภาพที่หย่าร้างจากการเป็นตัวแทนที่ต้องการโดยระบบการแสดงผล ระบบภายในนี้เรียกว่าระบบประสานงาน "เพจ" เมื่อคิดถึงภาพวาดใน Sketchpad พิกัดของหน้าจะถือว่าเป็นค่าคงที่ การแปลงขอบเขตหน้าที่ให้ความสามารถในการดูบนขอบเขตส่วนใด ๆ ของหน้าที่ต้องการในระดับใด ๆ ของการขยายราวกับว่าผ่านแว่นขยาย (... ) ตัวประกอบสเกลสำหรับการแสดงผลควบคุมขนาดของสี่เหลี่ยมจัตุรัสซึ่ง จะปรากฏในขอบเขต จำนวนจริงที่บันทึกไว้คือความยาวครึ่งหนึ่งของด้านข้างของสี่เหลี่ยมจัตุรัสเรียกว่า SCSZ สำหรับ SCope SiZe) ดังแสดงในรูปที่ 5.2 นอกจากนี้ยังบันทึกพิกัดหน้าของกึ่งกลางของขอบเขตสี่เหลี่ยม โดยการเปลี่ยนตัวเลขเหล่านี้ส่วนของหน้าที่แสดงในขอบเขตอาจมีการเปลี่ยนแปลงในขนาดและย้าย แต่ไม่หมุน

แผนภาพที่ 5.2 ในหน้า 73 แสดงว่า "ระบบพิกัดหน้า" ใช้หลักการทางคณิตศาสตร์ของระบบพิกัด X / Y ระบบพิกัดคาร์ทีเซียน (บางคนอาจถามว่าทำไมการประชุมแบบนั้นถึงเป็น ... )


แต่: หน้าจอเวกเตอร์ถูกนำมาใช้เพียงเพราะหน่วยความจำก็ยากเกินไปที่จะเป็นตัวแทนของภาพและเวกเตอร์ที่แสดงรายการ + ระยะเวลาการนำเสนอทั้งการเชื่อมต่อ + ความต้องการหน่วยความจำมากน้อยกว่า (เช่นรูปหลายเหลี่ยมกับชุ)
Micka

2

ไม่ใช่ทุกอย่างที่อยู่บนซ้าย

ตัวอย่างเช่น OpenGL ระบุว่าจุดกำเนิดอยู่ที่ด้านล่างซ้ายและนี่เป็นที่แพร่หลายทั่วทั้ง API: พิกัดพื้นผิว, วิวพอร์ต, สี่เหลี่ยมเท็กเซล, การฉายออร์โธแบบมาตรฐาน: มันอยู่ด้านล่างซ้ายตลอดทาง

มีความแตกต่างในการคิดที่นี่

บนหน้าจอคอมพิวเตอร์เช่นเดียวกับหนังสือเมื่อมีคนอ่าน (และฉันสมมติว่าเป็นภาษาอย่างภาษาอังกฤษที่นี่) พวกเขาอ่านจากซ้ายไปขวาและจากบนลงล่าง คุณทำมันเองเมื่อคุณเขียนคำถามนี้และคุณทำเมื่อคุณอ่านคำตอบ

ในวิชาคณิตศาสตร์และการออกแบบเมื่อคุณพล็อตกราฟคุณมีแกน X และแกน Y ที่มีค่า X บวกจะเหลือและ Y บวกจะเพิ่มขึ้น

หากคุณกำลังสร้างสิ่งต่าง ๆ เช่น 2D GUI ในเกมมันจะง่ายขึ้นและง่ายขึ้นสำหรับผู้ใช้หลายคนในการจัดวางในลักษณะ "บนซ้ายคือต้นกำเนิด"

หากคุณกำลังสร้างบางสิ่งบางอย่างเพื่อเลียนแบบการออกแบบหรือเลย์เอาต์บนกระดาษกราฟมันจะง่ายขึ้นและง่ายขึ้นสำหรับผู้ใช้หลายคนในการจัดวางในลักษณะ "ซ้ายล่างคือต้นกำเนิด"

ในความเป็นจริงทั้งสองนี้เป็นแบบแผนค่อนข้างไม่เป็นทางการและถ้าคุณตั้งค่าการฉายภาพ ortho คุณสามารถเลือกที่จะให้ต้นกำเนิดของคุณที่จุดใดก็ได้บนหน้าจอ (หรือปิด) โดยพลการบวกไปทางซ้ายหรือขวาและบวก คุณกำลังขึ้นหรือลง เป็นเพียงเรื่องของการปรับเมทริกซ์การฉายของคุณตามลำดับ

สิ่งสำคัญเพียงอย่างเดียวคือการเลือกการประชุมที่คุณจะใช้และใช้อย่างสม่ำเสมอ


คำตอบที่ดี ฉันกำลังสร้างอัลกอริธึมที่มีตรีโกณมิติมากมายซึ่งท้ายที่สุดจะนำไปสู่สิ่งต่าง ๆ ที่ถูกวาดบนหน้าจอและฉันก็ไม่แน่ใจจริงๆว่าถ้าฉันทำข้อห้ามหรือข้อตกลงบางอย่างโดยให้แกน y บวกขึ้น
Alexander Høst

-1

เนื่องจากหน้าจอเริ่มแสดงภาพจากมุมซ้ายด้านบน การเชื่อมโยงการแสดงผลหรือการวาดภาพของแกนพิกัดจะง่ายขึ้นเมื่อ (0,0,0) อยู่ที่มุมบนซ้ายโดยมี + แกน Y เข้าสู่หน้าจอ


-2

อาร์กิวเมนต์สำหรับ: (ตามตัวอย่าง)

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

รหัสตรงกับผลลัพธ์บนหน้าจอ :

ป้อนคำอธิบายรูปภาพที่นี่

ลูกศรสีแดงจะกลับหัวหากคุณไม่ได้ใช้ต้นกำเนิดบนซ้าย

ฉันไม่สามารถพูดได้ว่านี่เป็น "ทำไม" เพียงแค่นั้นมันเป็นเหตุผลที่ดีสำหรับแหล่งกำเนิดบนซ้าย


2
"ลูกศรสีแดงจะกลับหัวหากว่าคุณไม่ได้ใช้ต้นกำเนิดบนซ้าย"ใช่เลย นักพัฒนาเกมเขียนกราฟิกผ่านอาร์เรย์ 2d ในรหัสเป็นส่วนใหญ่หรือไม่?
Vaillancourt

ฉันพูดไม่ได้สำหรับนักพัฒนาเกมทั้งหมด ฉันทำ: newgrounds.com/portal/view/706067 Adam Atomic ทำเช่นกันจากการอ่านซอร์สโค้ดของ flixel ไลบรารี OpenGL และ SFML ทำแน่นอน OpenCL ช่วยให้คุณสรุปจุดข้อมูลลงใน X / Y, (get_global_id (สลัว)) แต่การจัดสรรหน่วยความจำเริ่มต้นคือ 1D
J MADISON
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.