Tại sao nguồn gốc trong tọa độ đồ họa máy tính ở phía trên bên trái?


36

Từ những gì tôi đã thấy hầu hết mọi thứ đều sử dụng tọa độ trong đó (0, 0) ở trên cùng bên trái và trục Y dương đi theo hướng xuống của màn hình.

Tại sao nó như thế này? Tại sao trục Y dương thông thường không đi lên như được hiển thị trong biểu đồ trong các lớp toán đơn giản?


7
Tôi sẽ lập luận rằng bắt đầu từ đầu và tăng dần khi bạn đi xuống có ý nghĩa hơn so với quy ước toán học, vì nó liên quan chặt chẽ hơn đến cách đọc và viết các ngôn ngữ Ấn-Âu.
Panda Pyjama

3
Tôi nghĩ rằng Y + trở lên có ý nghĩa khi vẽ các vật thể, vì mặt đất là nguồn gốc của bạn và hầu hết thế giới của bạn ở trên mặt đất. Tuy nhiên, đối với màn hình, tôi đưa ra giả thuyết rằng nó có liên quan đến việc bắt chước cách viết các ngôn ngữ Ấn-Âu.
Panda Pyjama


4
Các tọa độ thiết bị đã chuẩn hóa của OpenGL có trục Y hướng lên không?
Ray

1
Vì vậy, về cơ bản bạn đang hỏi "nguồn gốc của nguồn gốc là gì?"?
Ken

Câu trả lời:


42

Điều này được gây ra trong lịch sử. Các máy tính ban đầu có Cathode Ray Tube (CRT) "vẽ" hình ảnh bằng tia catốt từ góc trên bên trái sang phía dưới bên phải.

Để dễ dàng giao diện giữa bộ nhớ card đồ họa và CRT, bộ nhớ đã được đọc từ đầu và hình ảnh được vẽ từ trên cùng bên trái (với địa chỉ bộ nhớ thấp nhất) sang bên phải thấp hơn (với địa chỉ bộ nhớ cao nhất).

Gia hạn (dựa trên các ý kiến)

CRT dựa trên các TV tương tự có sẵn tại thời điểm đó.

Các TV tạo dòng hình ảnh theo dòng đầu tiên từ trái sang phải và sau đó từ trên xuống dưới . Lý do cho điều này chỉ có thể được giả định là dựa trên phong cách viết trong các tác phẩm phương Tây.


7
Chắc chắn, nhưng tại sao CRT vẽ từ trên cùng bên trái (nhìn từ khán giả)? Tại sao không theo chiều dọc? Tại sao không từ phải sang trái? Tại sao không từ dưới lên trên?
Panda Pyjama

1
Bạn có thể tìm thấy việc tạo hình ảnh của một CRT ở đây . Về cơ bản, điều này là dành cho truyền hình tương tự nhưng CRT cho máy tính có cùng công nghệ.
Uwe Plonus

12
CRT máy tính @PandaPajama làm điều đó bởi vì đó là cách tiêu chuẩn của TV tương tự, và ban đầu đối với máy tính gia đình thường sử dụng TV thay vì màn hình chuyên dụng. Tại sao những chiếc TV đầu tiên truyền thông tin bằng cách chia nó thành các đường quét và vẽ các đường quét từ trái sang phải - tôi không chắc, nhưng điều đó sẽ phù hợp với cách chúng ta viết, vì vậy đó có thể là một lý do đủ tốt để lựa chọn giữa các tùy chọn tùy ý.
Peteris

2
@Peteris: Cách người châu Âu viết
Vịt Mooing

1
Về mặt kỹ thuật, CRT rút ra từ Giai đoạn trên cùng bên phải đến Giai đoạn dưới cùng bên trái.
ps2goat

3

Đây là một câu hỏi tuyệt vời mà tôi đã nghĩ đến nhiều lần. Câu trả lời đơn giản cho "tại sao" là vì các định dạng TV cũng đã vẽ các đường của chúng từ trái sang phải rồi từ trên xuống dưới. Màn hình máy tính ban đầu là màn hình CRT (TV nhỏ), do đó, định dạng tự nhiên giữ nguyên. Khi màn hình trở thành màn hình phẳng (và TV cũng trở thành màn hình phẳng), việc giữ nguyên định dạng tương tự để dễ tương thích là điều tự nhiên.

Tất nhiên sau đó bạn có thể hỏi: tại sao TV vẽ theo cách này? Chúng được phát minh vào đầu thế kỷ 20, do đó bạn có thể tưởng tượng được bao nhiêu suy nghĩ hoặc thiếu đi trong thiết kế, nếu nó thậm chí còn bị nghi ngờ. Lưu ý: không có nghĩa là thiếu tôn trọng vì việc đưa các phương trình cho các tia từ tính đến các vạch thích hợp trên màn hình trở nên khó khăn hơn nhiều so với ma trận đơn giản của các "bóng đèn" nhỏ. (Loại này đưa ra câu hỏi làm thế nào trên Trái đất họ đã phát minh ra CRT trước ma trận chấm đơn giản, trở lại vào đầu thế kỷ 20?)

Tuy nhiên, tôi đoán là có lẽ nó không bao giờ bị nghi ngờ (một điều xấu) vì các ngôn ngữ phương Tây viết các từ trái sang phải và từ trên xuống dưới. Có lẽ không ai quan niệm về khả năng làm điều đó khác đi.

Cá nhân, tôi không thích định dạng này. Tôi đã có được thái độ này khi tôi lập trình các trò chơi và các mô phỏng khác liên quan đến quỹ đạo hình elip. Bất cứ khi nào bạn tìm kiếm các phương trình vẽ liên quan đến sin, cos hoặc tan, bạn phải cẩn thận đảo ngược các dấu hiệu liên quan đến các tham số trục y ... hoặc bạn sẽ nhận được điều sai. Một ví dụ sẽ là các phương trình tham số cho hình elip được vẽ ở bất kỳ góc 2D nào. Nó có thể là một cơn ác mộng thực sự mổ xẻ tội lỗi tội lỗi, tội lỗi cos và những điều tương tự.

Nói một cách ngắn gọn về mặt toán học, màn hình nằm trong Quadrant 4 thay vì Quadrant 1. Điều này phức tạp không cần thiết.

BTW khi bạn đạt đến 3 chiều, trục z được coi là "đi lên" theo hướng tích cực. Thật là mỉa mai. [EDIT]: Có thể không, xem bình luận của tôi dưới đây.

Thêm 2 điều tôi nhận ra / bắt gặp:

Chủ nhật ở bán cầu bắc (có con trỏ hướng về phía bắc và đĩa song song với mặt đất) luôn quay theo chiều kim đồng hồ . Vì vậy, nếu chúng ta đặt giờ 0 ở đầu "mặt đồng hồ", thì con trỏ bóng bắt đầu di chuyển sang phải. Đây có thể là nguồn gốc của hướng từ trái sang phải trong các ngôn ngữ phương tây, truyền xuống tọa độ của Cartesian và màn hình TV / máy tính.

Các máy tính cũ không vẽ các đối tượng đồ họa quá nhiều. Họ đã vẽ văn bản trong một dấu nhắc lệnh. Vì vậy, việc đặt dòng 0 tại y = 0 là điều tự nhiên. Nếu chúng ta có nguồn gốc từ dưới bên trái, toán học vẽ văn bản sẽ liên quan nhiều hơn một chút và nó có thể là một vấn đề lớn đối với những máy tính cũ chậm chạp này (những người thậm chí đã tạo một lối tắt để tăng thêm 1, vì lợi ích tốt, gọi là "++"). Ngoài ra, bạn cần biết độ phân giải của màn hình, trong khi nếu bạn chỉ thực hiện dòng 0 tại y = 0, bạn không cần phải biết độ phân giải.


2
Bạn làm cho nó có vẻ như đầu thế kỷ 20 đã được người Neanderthal cư trú;)
bummzack

1
Aw, tôi chỉ cố gắng nhấn mạnh sự tương phản rõ rệt về độ phức tạp giữa CRT và ma trận đèn LED. CRT có toán học phức tạp đáng kinh ngạc liên quan đến sự lệch từ của tia sáng. Một ma trận điểm là cách dễ dàng hơn để quấn đầu bạn: chỉ cần gửi dòng điện đến đúng đèn LED vào đúng thời điểm. Nếu bất cứ điều gì, mức độ phức tạp lớn hơn này cho thấy rằng đầu thế kỷ 20 đã được nhiều thiên tài giỏi hơn, vì họ phải làm điều phức tạp hơn trong thời đại hạn chế hơn nhiều.
DrZ214

Ma trận LED được sử dụng để hiển thị thông tin, chúng không bao giờ trở nên phổ biến đối với màn hình TV và máy tính. Các màn hình phẳng hiện đại không phải là ma trận LED, mà là màn hình LCD có đèn nền. Đèn LED chỉ được sử dụng để chiếu sáng ở một số màn hình, nhưng hình ảnh không được tạo ra bởi đèn LED. LCD là một kỹ thuật đơn giản, nhưng cải thiện độ phân giải từ màn hình đồng hồ cũ lên hàng trăm hoặc hàng nghìn pixel trên màn hình (và sau đó, một số, vì bạn cần ba pixel để thêm màu!) Không nhất thiết phải dễ dàng hơn nhiều so với điều chỉnh tín hiệu sóng điều khiển chùm tia EM (tương đương với phát sóng vô tuyến)
oerkelens

Trục Z trở lên không mỉa mai - đó là toán học. Hệ tọa độ cần phải thuận tay phải, vì vậy nếu + X ở bên phải và + Y nằm trong màn hình, điều đó làm cho + Z lên. Giống như nếu chúng ta giữ lại + X ở bên phải, + Y xuống, + Z nằm trong màn hình.
tpg2114

1
@ tgp2114 Tại sao hệ tọa độ cần phải thuận tay phải?
Taemyr

3

Phụ lục: Đồ họa ban đầu được thực hiện trên màn hình vectơ , chỉ cần một bước lên từ máy hiện sóng nhìn thấy trong phòng thí nghiệm trong đó (0,0) sẽ ở giữa màn hình chính xác, tùy thuộc vào một số núm xoay để đặt tỷ lệ X / Y, X / Y bù và có thể đảo ngược X / Y.

Ví dụ, phần cứng chuyên dụng của Atari "Asteroids" (1979) đã sử dụng màn hình vector; thật thú vị khi biết những gì nó nghĩ hệ thống phối hợp chương trình của nó là gì.

Hệ thống "Phác thảo" của Ivan Sutherland (1963) dựa trên màn hình vectơ TX-2 và trong "Bảng vẽ phác thảo: Hệ thống giao tiếp đồ họa của người máy" (luận án tiến sĩ, tháng 1 năm 1963), ông viết trên trang 70ff:

Hệ tọa độ của hệ thống hiển thị TX-2 có nguồn gốc ở trung tâm của phạm vi và yêu cầu mười bit thông tin lệch nằm ở bên trái của các từ khóa máy tính 18 bit cho mỗi trục.

...

Để thuận tiện trong việc biểu diễn nhiều biến thành phần và cho độ chính xác hơn 18 bit, Sketchpad sử dụng hệ thống tọa độ bên trong để vẽ biểu diễn được tách ra khỏi biểu diễn được yêu cầu bởi hệ thống hiển thị. Hệ thống nội bộ này được gọi là hệ tọa độ "trang". Khi nghĩ về các bản vẽ trong Bảng vẽ phác thảo, tọa độ trang được coi là cố định. Chuyển đổi từ trang sang phạm vi cho phép khả năng xem trên phạm vi bất kỳ phần nào của trang mong muốn, ở bất kỳ mức độ phóng đại nào, như thể thông qua kính lúp (...) Một hệ số tỷ lệ cho màn hình điều khiển kích thước của hình vuông sẽ xuất hiện trên phạm vi. Số thực tế được lưu là một nửa chiều dài của cạnh hình vuông, được gọi là SCSZ cho SCope SiZe) như trong Hình 5.2. Cũng được lưu là tọa độ trang của trung tâm của hình vuông phạm vi. Bằng cách thay đổi những con số này, phần của trang hiển thị trên phạm vi có thể được thay đổi kích thước và di chuyển, nhưng không được xoay.

Sơ đồ 5.2 trên trang 73 cho thấy "hệ tọa độ trang" sử dụng quy ước toán học của hệ tọa độ cartesian X / Y. (Người ta có thể hỏi tại sao quy ước đó là như vậy ...)


nhưng: màn hình vectơ chỉ được sử dụng vì bộ nhớ quá hiếm để thể hiện toàn bộ danh sách hình ảnh và vectơ hiển thị + thời lượng trình bày + kết nối cần ít bộ nhớ hơn (như đa giác so với voxels)
Micka

2

Không phải tất cả mọi thứ là trên cùng bên trái.

Ví dụ, OpenGL chỉ định rằng gốc tọa độ ở dưới cùng và điều này có sức lan tỏa trong toàn bộ API: tọa độ kết cấu, khung nhìn, hình chữ nhật texel, hình chiếu trực giao chuẩn: nó nằm phía dưới bên trái.

Có một sự khác biệt trong suy nghĩ ở đây.

Trên màn hình máy tính, như với sách, khi mọi người đọc (và tôi giả sử một ngôn ngữ như tiếng Anh ở đây), họ đọc từ trái sang phải và từ trên xuống dưới. Bạn đã tự làm nó khi bạn viết câu hỏi này và bạn đang làm nó khi bạn đọc câu trả lời cho nó.

Trong toán học và thiết kế khi bạn vẽ đồ thị, bạn có trục X và trục Y với X dương đi sang trái và Y dương đi lên.

Nếu bạn đang xây dựng một cái gì đó giống như GUI 2D trong trò chơi, nhiều người có thể dễ dàng và trực quan hơn để sắp xếp nó theo cách "trên cùng bên trái là nguồn gốc".

Nếu bạn đang xây dựng một cái gì đó để bắt chước một thiết kế hoặc bố cục trên giấy biểu đồ, có thể dễ dàng và trực quan hơn đối với nhiều người để đặt nó theo cách "dưới cùng bên trái là nguồn gốc".

Trên thực tế, cả hai đều là những quy ước khá không chính thức và nếu bạn đang thiết lập một phép chiếu trực giao, bạn thực sự có thể chọn đặt nguồn gốc của mình tại bất kỳ điểm tùy ý nào trên (hoặc tắt) màn hình, với X dương sang trái hoặc phải và dương Y đi lên hoặc xuống. Đó chỉ là vấn đề điều chỉnh ma trận chiếu của bạn cho phù hợp.

Do đó, điều quan trọng duy nhất là chọn quy ước nào bạn sẽ sử dụng và sử dụng nó một cách nhất quán.


Câu trả lời chính xác. Tôi đang tạo ra một thuật toán với hàng tấn lượng giác mà cuối cùng sẽ dẫn đến những thứ được vẽ trên màn hình, và tôi thực sự không chắc chắn nếu tôi phá vỡ một số điều cấm kỵ hoặc quy ước bằng cách làm cho trục dương tăng lên.
Alexander Høst

-1

Bởi vì màn hình bắt đầu hiển thị hình ảnh từ góc trên cùng bên trái. Sẽ dễ dàng hơn khi liên kết kết xuất hoặc vẽ trục tọa độ khi (0,0,0) ở góc trên cùng bên trái với trục + Y đi vào màn hình.


-2

Một đối số CHO: (Ví dụ)

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

Mã phù hợp với kết quả trên màn hình :

nhập mô tả hình ảnh ở đây

Mũi tên đỏ sẽ lộn ngược nếu bạn KHÔNG sử dụng nguồn gốc trên cùng bên trái.

Tôi không thể nói nếu đây là "tại sao". Chỉ là, đó là một lý do tốt cho nguồn gốc bên trái.


2
"Mũi tên đỏ sẽ lộn ngược nếu bạn KHÔNG sử dụng nguồn gốc trên cùng bên trái" Vâng, vậy sao? Các nhà phát triển trò chơi có viết đồ họa thông qua các mảng 2d trong mã hầu hết thời gian không?
Vaillancourt

Tôi không thể nói cho tất cả các nhà phát triển trò chơi. Tôi cũng vậy: newgrounds.com/portal/view/706067 Adam Atomic cũng vậy, từ việc đọc mã nguồn của flixel. Thư viện OpenGL và SFML chắc chắn làm được. OpenCL cho phép bạn trừu tượng các điểm dữ liệu thành X / Y, (get_global_id (mờ)) nhưng cấp phát bộ nhớ ban đầu là 1D.
J MADISON
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.