컴퓨터 그래픽의 원점이 왼쪽 상단에있는 이유는 무엇입니까?


36

내가 본 것에서 거의 모든 것은 (0, 0)이 왼쪽 상단에 있고 양의 Y 축이 화면의 아래쪽 방향으로 이동하는 좌표를 사용합니다.

왜 이런가요? 간단한 수학 수업에서 그래프에 표시된 것처럼 기존의 양의 Y 축이 위로 올라가지 않는 이유는 무엇입니까?


7
나는 유럽에서 언어를 읽고 쓰는 방식과 더 밀접한 관련이 있기 때문에, 처음부터 시작해서 내려 갈수록 수학 규칙보다 더 의미가 있다고 주장합니다.
Panda Pajama

3
나는 지상이 당신의 기원이고 대부분의 세계가 지상 위에 있기 때문에 물리적 물체를 그릴 때 Y +가 의미가 있다고 생각합니다. 그러나 디스플레이의 경우 인도 유럽 언어가 작성되는 방식을 모방하는 것과 관련이 있다고 가정합니다.
Panda Pajama


4
OpenGL의 정규화 된 장치 좌표에 위쪽 Y 축이 없습니까?
Ray

1
본질적으로 "원점의 기원은 무엇입니까?"
Ken

답변:


42

이것은 역사에서 발생합니다. 초기 컴퓨터에는 음극선이있는 이미지를 왼쪽 상단에서 오른쪽 하단으로 "그리기"하는 음극선 관 (CRT)이있었습니다.

그래픽 카드 메모리와 CRT 간의 인터페이스를 쉽게하기 위해 메모리를 처음부터 읽었으며 이미지는 왼쪽 상단 (가장 낮은 메모리 주소)에서 오른쪽 하단 (가장 높은 메모리 주소)으로 그려졌습니다.

확장 (댓글을 기반으로 함)

CRT는 당시에 사용 가능한 아날로그 TV 세트를 기반으로합니다.

TV 세트는 먼저 왼쪽에서 오른쪽으로, 위에서 아래로 이미지를 한 줄씩 만듭니다 . 이것의 이유는 서양식 콘 트리의 작문 스타일에 근거한 것으로 만 가정 될 수있다.


7
물론, 왜 CRT가 왼쪽 상단 (관중에서 본)에서 그려 집니까? 왜 세로가 아닌가? 오른쪽에서 왼쪽으로 어떻습니까? 왜 아래에서 위로?
Panda Pajama

1
CRT의 이미지 생성은 여기에서 찾을 수 있습니다 . 기본적으로 이것은 아날로그 텔레비전 용이지만 컴퓨터의 CRT는 동일한 기술을 사용합니다.
Uwe Plonus

12
@PandaPajama 컴퓨터 CRT는 아날로그 TV 표준과 같은 방식이기 때문에 처음에는 가정용 컴퓨터의 경우 특수 모니터 대신 TV를 사용하기 때문에 그렇게합니다. 첫 번째 TV가 정보를 스캔 라인으로 분할하고 스캔 라인을 왼쪽에서 오른쪽으로 그려서 왜 정보를 전송했는지 왜 확실하지는 않지만, 우리가 쓰는 방식과 일치하므로 임의의 옵션 중에서 선택해야 할 충분한 이유가 될 수 있습니다.
Peteris

2
@Peteris : 유럽인이 쓰는 방식
Mooing Duck

1
기술적으로 CRT는 스테이지 상단 오른쪽에서 스테이지 하단 왼쪽으로 그립니다.
ps2goat

3

이것은 여러 번 생각한 훌륭한 질문입니다. "왜"에 대한 간단한 대답은 TV 형식도 왼쪽에서 오른쪽으로, 위에서 아래로 선을 그렸기 때문입니다. 오리지널 컴퓨터 모니터는 CRT 스크린 (소형 TV) 이었으므로 형식은 자연스럽게 동일하게 유지되었습니다. 모니터가 평면 화면이되었을 때 (TV도 평면 화면이되었을 때) 쉽게 호환되도록 동일한 형식을 유지하는 것이 당연했습니다.

물론 다음과 같은 질문을 할 수 있습니다. 왜 TV가 이런 식으로 그려 집니까? 그것들은 20 세기 초에 발명되었으므로 디자인에 대한 생각이나 부족이 의문이 든다면 상상할 수 있습니다. 참고 : 작은 "전구"의 간단한 매트릭스와는 달리, 화면의 적절한 선으로 광선을 자기 적으로 편향시키는 방정식을 얻는 것이 엄청나게 어려운 일이므로 무례하지 않습니다. (이 종류는 지구상에서 20 세기 초반에 간단한 점 행렬보다 CRT를 어떻게 발명했는지에 대한 의문을 제기합니다.)

그럼에도 불구하고 서구 언어는 왼쪽에서 오른쪽으로, 위에서 아래로 단어를 쓰므로 아마도 의심의 여지가 없었을 것입니다. 아마도 아무도 다르게 할 가능성을 생각하지 못했습니다.

개인적으로 나는이 형식을 싫어한다. 타원형 궤도와 관련된 게임 및 기타 시뮬레이션을 프로그래밍하면서 이러한 태도를 얻었습니다. sin, cos 또는 tan과 관련된 방정식을 그릴 때마다 y 축 매개 변수를 다루는 부호를주의해서 뒤집어 야합니다. 그렇지 않으면 잘못된 것이 그려집니다. 예를 들어 2D 각도로 그려진 타원에 대한 파라 메트릭 방정식이 있습니다. 그것은 죄악, 죄악 및 이와 유사한 것들을 해부하는 악몽 일 수 있습니다 .

수학적으로 간단하게 말하면, 화면은 4 분면 1 대신 4 분면입니다. 이것은 불필요하게 복잡합니다.

BTW 3 차원에 도달하면 z 축은 양의 방향으로 "상향"으로 간주됩니다. 아이러니. [편집] : 아마 아닐 수도 있습니다, 아래 내 의견을보십시오.

내가 깨달았거나 얻은 2 가지 더 :

북반구의 해시계 (북쪽을 향한 포인터와 디스크가지면과 평행)는 항상 시계 방향으로 회전 합니다. 따라서 "시계 앞면"의 상단에 0 시간을 놓으면 그림자 포인터가 오른쪽으로 이동하기 시작합니다. 이것은 서구 언어에서 왼쪽에서 오른쪽 방향의 원점이 될 수 있으며 데카르트 좌표 및 TV / 컴퓨터 화면으로 전파됩니다.

오래된 컴퓨터는 그래픽 객체를 그리 많이 그리지 않았습니다. 그들은 명령 프롬프트에서 텍스트를 그렸습니다. 따라서 y = 0에 라인 0을 넣는 것이 당연합니다. 왼쪽 아래 원점을 가졌다면, 텍스트 라인을 그리는 수학이 조금 더 복잡 할 것입니다. 그리고 오래된 느린 컴퓨터 (1을 늘리기위한 지름길을 만든 사람도 많았지 만, "++"라고 함). 또한 화면의 해상도를 알아야하는 반면 y = 0에서 라인 0 만 수행하면 해상도를 알 필요가 없습니다.


2
당신은 20 세기 초 네안데르탈 인에 의해 채워진
것처럼 들리게합니다

1
저는 CRT와 LED 매트릭스 사이의 복잡한 복잡성을 강조하려고했습니다. CRT는 광선의 자기 편향과 관련하여 놀랍도록 복잡한 수학을 가지고 있습니다. 도트 매트릭스는 머리를 감쌀 수있는 방법입니다. 적절한 시간에 올바른 LED로 전류를 보내기 만하면됩니다. 어쨌든,이 훨씬 더 큰 복잡도는 20 세기 초에 훨씬 더 제한된 시대에이 더 복잡한 일을해야했기 때문에 더 많은 천재들이 모인 것을 암시합니다.
DrZ214

LED 매트릭스 정보를 표시하는 데 사용되었으며 TV 및 컴퓨터 모니터에 인기가 없었습니다. 현대 평면 스크린은 LED 매트릭스가 아니라 백라이트 LCD입니다. LED는 일부 화면에서 백라이팅에만 사용되지만 이미지는 LED로 생성되지 않습니다. LCD는 간단한 기술이지만 이전 시계 디스플레이의 해상도를 화면 전체에서 수백 또는 수천 픽셀로 개선하는 것 (그리고 색상을 추가하기 위해 3 개의 하위 픽셀이 필요하기 때문에 일부)은 반드시 웨이브 신호를 변조하는 것보다 훨씬 쉬운 것은 아닙니다. (방법으로 라디오 방송에 필적)는 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) 의 전용 하드웨어 는 벡터 스크린을 사용했다; 프로그램 좌표계가 무엇이라고 생각하는지 아는 것은 흥미로울 것입니다.

Ivan Sutherland의 "Sketchpad" 시스템 (1963)은 TX-2 벡터 디스플레이를 기반으로하며 "Sketchpad : Man-Machine Graphical Communication System" (PhD 논문, 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와 같은 것을 구축하는 경우 많은 사람들이 "왼쪽 상단은 원점"방식으로 배치하는 것이 더 쉽고 직관적 일 수 있습니다.

그래프 용지에서 디자인 또는 레이아웃을 모방 할 무언가를 구축하는 경우 많은 사람들이 "왼쪽 하단이 원점"방식으로 배치하는 것이 더 쉽고 직관적 일 수 있습니다.

실제로이 두 가지는 매우 비공식적 인 규칙이며, 직교 투영법을 설정하는 경우 화면에서 임의의 지점에서 원점을 갖도록 선택할 수 있습니다. Y가 올라가거나 내려갑니다. 투영 행렬을 적절히 조정하면됩니다.

따라서 중요한 것은 사용할 규칙을 선택하고 일관되게 사용하는 것입니다.


좋은 대답입니다. 저는 수많은 삼각법을 사용하여 화면에 표시되는 알고리즘을 만들고 있으며 y 축 양수가 증가하여 금기 또는 규칙을 어기는 것인지 확실하지 않았습니다.
Alexander Høst

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

코드는 화면의 결과와 일치합니다 .

여기에 이미지 설명을 입력하십시오

왼쪽 상단 원점을 사용하지 않으면 빨간색 화살표가 거꾸로 나타납니다 .

이것이 "왜"인지 말할 수 없습니다. 바로 왼쪽 상단 원점에 대한 좋은 이유입니다.


2
"빨간색 화살표가 거꾸로 당신이 왼쪽 상단 원점을 사용하지 않은 경우가 될 것" 그래서, 그래? 게임 개발자는 대부분 코드에서 2D 배열을 통해 그래픽을 작성합니까?
Vaillancourt

모든 게임 개발자에게 말할 수는 없습니다. 내가 수행 newgrounds.com/portal/view/706067 아담 원자는 flixel의 소스 코드를 읽을뿐만 아니라 않습니다. OpenGL과 SFML 라이브러리는 확실히 그렇습니다. OpenCL을 사용하면 데이터 포인트를 X / Y (get_global_id (dim))로 추상화 할 수 있지만 초기 메모리 할당은 1D입니다.
J MADISON
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.