본문 바로가기
컴퓨터공학/기초

화면 및 2D 그래픽

by 하이방가루 2022. 9. 18.
728x90
반응형

  1960년 PDP-1은 초기 그래픽 컴퓨팅의 훌륭한 예이다.

DPD-1

왼쪽에 캐비닛 크기의 컴퓨터가 있고, 전기 기계식 텔레타이프 기계가 중간에, 오른쪽에 둥근 스크린이 있다. 이런 구조는 당시에 텍스트 기반 작업과 그래픽 기반 작업 업무가 뚜렷했기 때문이다. 사실 이 초기 컴퓨터 화면은 선명한 텍스트를 렌더링 하기 매우 어려웠다. 반면, 타이핑된 용지는 훨씬 더 높은 대비 및 해상도를 제공했다.

  초기 컴퓨터 화면의 가장 일반적인 용도는 레지스터의 값과 같은 프로그램 운영을 추적하는 것이었다. 텔레타이프 머신이 이것을 종이에 반복해서 인쇄하는 것은 의미가 없다. 그것은 많은 종이를 낭비하고, 속도도 느리다. 반면 스크린은 동적이고 신속하게 업데이트되어 임시 값을 나타내는 데 적합하다. 그럼에도 컴퓨터 화면은 프로그램의 출력에는 거의 고려되지 않았다. 대신, 계산 결과는 전형적으로 종이 또는 다른 영구적인 매체에 쓰였다.

  그러나 스크린은 너무 유용해서 1960년대 초부터 사람들은 그것을 멋지게 사용하기 시작했다.

 

  많은 디스플레이 기술이 수십 년 동안 새로 만들어졌지만, 가장 영향력 있는, 그리고 가장 초기의 것은 음극 선관(CRT;Cathode Ray Tube)이다. 이것은 형광체가 코팅된 스크린으로 방사체에서 전자를 쏘아 작동한다. 전자가 코팅을 칠 때, 몇 초 동안 빛나게 된다. 전자는 하전 입자이기 때문에 전자기장으로 그 경로를 조작할 수 있다. 전자를 상하좌우의 원하는 방향으로 조종하기 위해 판이나 코일이 내부에 사용된다.

  이 컨트롤을 사용해서 두 가지 방법으로 그래픽을 그릴 수 있다. 첫 번째 옵션은 전자 빔이 모양을 따라가도록 지시하는 것이다. 이를 벡터 스캐닝(Vector Scanning)이라고 한다. 빛이 조금씩 지속되기 때문에, 경로를 신속하게 반복하여 단색 이미지를 만들어낸다.

  다른 옵션은 한 줄씩 한 줄씩 스캔하면서, 반복적으로 고정된 경로를 따라 왼쪽 위부터 오른쪽 아래까지, 계속 반복한다. 그래픽을 만들기 위해서 전자빔은 특정 시점에만 켠다. 이를 래스터 스캐닝(Raster Scanning)이라고 한다. 이 방법을 사용하면 도형과 글자, 작은 선분으로 만들어진 모든 것들을 표시할 수 있다.

  결국, 디스플레이 기술이 향상됨에 따라, 선명한 점을 스크린에 만들 수 있게 되었다. 일명 픽셀(Pixel)이라고 부르는 것이다. 액정 디스플레이(LCD;Liquid Crystal Display)는 오늘날 상당히 다른 기술을 사용한다. 그러나 LDC는 래스터 스캔을 사용해 매우 작은 빨강, 녹색, 파랑 픽셀의 밝기를 1초에 여러 번 업데이트한다.

 

  대부분의 초기 컴퓨터는 픽셀을 사용하지 않았다. 물리적으로도 못한 게 아니고 당시 컴퓨터의 너무 많은 메모리를 소비했기 때문이다. 200 x 200 픽셀 이미지에는 40,000 픽셀이 포함된다. 각 픽셀에 대해 단지 흰색 또는 검정인 1비트의 데이터를 사용한다고 해도, 회색조는 아니지만, 그 이미지는 4만 비트의 메모리를 소비한다. 이것을 당시 PDP-1의 전체 RAM의 절반 이상을 차지한다.

  그래서 컴퓨터 과학자와 엔지니어들은 그래픽을 렌더링 하는 영리한 트릭을 만들어내야만 했다. 수만 픽셀을 저장하는 대신, 초기 컴퓨터는 훨씬 작은 문자 배열을 저장했다. 일반적으로 80 x 25 자의 문자로 구성된다. 총 2000자이다. 그리고 각각이 ASCII 같은 것을 사용하여 8비트로 인코딩 된다면 문자로 가득 찬 화면의 16,000비트의 메모리를 소비하게 된다.

  이 방법을 쓰기 위해, 컴퓨터에 램에서 문자를 읽을 수 있고, 이를 그래픽으로 변환해서 화면에 그릴 수 있는 여분의 하드웨어가 필요했다. 이를 문자 생성기(Character Generator)라고 하면, 이것은 기본적인 최초의 그래픽 카드였다. 이것은 안쪽에 읽기 전용 메모리(ROM;Read-only Memory)가 있어, 각 문자(도트 매트릭스 패턴)에 대한 그래픽을 저장했다. 그래픽 카드가 문자"K"에 대한 8비트 코드를 인식하면, 스크린 상에 문자 K의 2D 패턴을 적절한 위치에 래스터 스캔을 한다. 이렇게 하려면, 문자 생성기는 그래픽을 위해 따로 둔 컴퓨터 메모리 일부에 대한 특별 접근 권한이 필요했다. 그 부분은 화면 버퍼(Screen Buffer)라고 불렸다. 텍스트를 화면으로 렌더링 하려는 컴퓨터 프로그램은 단순히 이 부분에 저장된 값을 조작했다. RAM에 있는 다른 데이터에서 하는 것과 비슷하다.

 

  위의 구조는 훨씬 적은 메모리가 필요했지만, 그릴 수 있는 유일한 것은 텍스트뿐이었다. 사람들은 이 기본적인 문자 집합에서 문자를 이용해 예술을 하거나 초보적인 의사 그래픽 인터페이스를 만들려고 노력했다. 이 기본 문자 집합은 밑줄과 더하기 기호 같은 것을 사용해 상자, 선 및 기타 기본 모양을 만들었다.

  하지만 문자 집합은 너무 작아 몹시 정교한 작업을 수행하기 어려웠다. 그래서 다양한 ASCII 확장이 이루어져 새로운 반그래픽 문자가 추가되었다. IBM의 CP437은 DOS에서 사용되었다.

  일부 시스템에서는 텍스트 색상과 배경 색상을 몇 가지 추가 비트로 정의할 수 있었다. 이는 문자 집합으로 완전히 구축된 DOS와 같은 인터페이스를 허용했다.

 

  문자 생성기는 메모리를 절약할 수 있는 영리한 방법이었다. 그러나 이것은 임의의 모양을 그릴 수 있는 방법을 제공하지 않았다. 이것은 전기 회로나 건축 계획, 지도 등을 그리고 싶을 때 중요하다. 이를 위해, 컴퓨터 과학자들은 메모리를 잡아먹는 픽셀에 의존 없이, CRT에서 가능한 벡터 모드를 사용했다.

  아이디어는 매우 간단하다. 화면에 그려지는 모든 내용은 일련의 선으로 정의된다. 화면을 데카르트 평면인 것처럼 가정하고, 왼쪽 위 구석을 (0, 0) 원점으로 정의한다. 초기 벡터 디스플레이 시스템인 Vextrex에서 다음의 벡터 명령을 빌려 모양을 그릴 수 있다.

  먼저 리셋을 하여, 화면을 깨끗이 하고 전자총으로 된 도면점을 0으로 움직이고 선의 밝기를 0으로 설정한다. 그런 다음 도면점을 (50, 50)으로 이동하고, 선 강도를 100%로 설정한다. 강도가 올라간 상태에서 이제 (100, 50)으로 이동해서 그다음 (60, 75) 그리고 다시 (50, 50)으로 되돌아간다. 마지막으로 선 강도를 다시 0%로 되돌리면 간단하게 삼각형을 그리게 된다.

  이 일련의 명령은 160비트 단위를 소모하여, 픽셀 값의 거대한 행렬을 유지하는 것보다 훨씬 효율적이다. 문자 생성기로 문자를 저장하고, 그래픽으로 변환하는 방법과 마찬가지로 벡터 명령도 메모리에 저장되고 벡터 그래픽 카드를 사용하여 화면에 렌더링 된다. 수백 개의 명령을 순차적으로 화면 버퍼에 함께 묶어 복잡한 그래픽을 만드는 데에 사용할 수 있다. 이 그래픽은 모두 라인으로 만들어진다.

  이 벡터들은 모두 메모리에 저장되기 때문에, 컴퓨터 프로그램은 값을 자유롭게 업데이트할 수 있으며, 시간이 지남에 따라 변경되는 그래픽을 허용한다. 바로 애니메이션이 만들어지게 되는 것이다.

 

  가장 초기의 비디오 게임 중 하나인 SpaceWars는 벡터 그래픽을 사용하여 1962년 PDP-1에 만들어졌다. 이것은 이후 많은 게임들에게 영감을 주었다. 소행성이나 최초의 상업용 아케이드 비디오 게임인 Computer Space 같은 게임들이 예이다.

 

  1962년은 SketchPad로 인해 거대한 이정표가 되었다. SketchPad는 컴퓨터 이용 설계(Computer-Aided Design;오늘날 CAD 소프트웨어)를 제공하는 대화형 그래픽 인터페이스이다. 이것은 가장 초기의 완벽한 그래픽 응용 프로그램 예제로 널리 간주된다. 그리고 그 발명자인 Ivan Sutherland는 이 돌파구로 이후에 튜링 상을 수상했다.

  그래픽과 상호작용하기 위해 SketchPad는 당시 발명된 입력 장치인 라이트펜(lighte pen)을 사용했다. 컴퓨터에 선으로 연결되어 있는 스타일러스 펜이다. 펜은 끝부분에 광센서를 사용함으로써 컴퓨터 모니터의 새로 고침을 감지했다. 새로 고침의 타이밍을 사용하여, 컴퓨터는 실제로 화면상의 펜의 위치를 파악할 수 있다.

  이 라이트펜과 거대한 컴퓨터의 다양한 버튼들로 사용자는 선과 다른 간단한 모양을 그릴 수 있었다. SketchPad는 완벽한 평행선 그리기, 같은 길이의 선 그리기, 완벽한 90도 교차점으로 모서리를 직선화, 심지어 동적으로 모양을 위아래로 스케일링하는 작업을 할 수 있었다. 종이로 하기 힘든 이러한 것들을 이제 컴퓨터가 버튼 하나로 할 수 있게 된 것이다.

  사용자는 자신이 만든 복잡한 디자인을 저장한 다음 나중에 디자인에 붙여 넣을 수 있었고 심지어 다른 사람들과 공유할 수도 있었다. 이것으로  전자 구성 요소와 가구 조각 같은 도형의 라이브러리를 가질 수 있었고, 자신의 설계도에 딱 들어맞게 조작할 수 있다.

 

  오늘날의 관점에선 이것은 일상적인 것이지만, 1962년 컴퓨터가 여전히 캐비닛 크기로 펀치카드를 통과시킬 때, SketchPad와 라이트펜은 센세이션 한 것이었다. 이것은 컴퓨터 사용법에 대한 중요한 전환점이 되었다. 컴퓨터는 더 이상 수학 계산만 하는 기계가 아니게 된 것이다. 이제 컴퓨터는 잠재적 조수로서, 대화식으로 인간의 작업을 보강하게 되었다.

 

  최초의 현대식 컴퓨터와 진정한 픽셀 그래픽 디스플레이는 1960년대 후반에 등장했다. 메모리의 비트가 화면상의 픽셀에 직접 매핑되는 방식이다. 이는 비트맵 디스플레이(Bitmapped Display)라고 불리는 것이다. 전체 픽셀 컨트롤을 사용하면 완전히 임의적인 그래픽이 가능했다. 화면의 그래픽은 거대한 행렬의 픽셀 값으로 여길 수 있다. 이전처럼, 컴퓨터는 프레인 버퍼(Frame Buffer)라고 하는 픽셀 데이터를 위한 특별한 메모리 영역을 따로 둔다. 초기에는 컴퓨터의 RAM이 사용되었지만, 이후의 시스템은 고속 액세스를 위해 그래픽 카드 자체에 위치한 특수 고속 비디오 RAM(VRAM;Video RAM)을 사용한다. 이것은 오늘날까지 이어지는 방식이다.

 

  8비트 회색조 화면에서 우리는 검은색인 0의 강도에서 흰색인 255의 강도까지의 값을 설정할 수 있다.(실제로는 많은 초기 디스플레이가 흰색을 표현할 수 없어서 녹색이거나 주황색이었다.) (30,0)부터 (30,35)까지 선을 그리고 싶다면 루프를 사용해서 프레임 버퍼의 한 점에서 다른 점까지 값을 바꿔주기만 하면 된다.

  이제 프로그램은 프레임 버퍼의 픽셀 데이터를 조작하여 대화형 그래픽을 만들 수 있다. 물론 프로그래머는 바닥부터 그리기 함수를 만드는 데에 시간을 낭비하지 않는다. 프로그래머는 즉시 선, 곡선, 도형, 텍스트 등을 그리는 함수를 쓸 수 있는 그래픽 라이브러리를 사용한다.

 

  비트맵 그래픽의 유연성은 상호작용적 컴퓨팅의 전체적인 새로운 가능성을 열었다. 하지만 수십 년간 너무 가격이 비쌌다. 1971년 말까지 약 7만 대의 전기 기계식 텔레타이프 기계와 7만 대의 단말기가 미국에서 사용된 것으로 추정되었다. 이중 미국에 약 1,000대의 컴퓨터만이 대화형 그래픽 화면이 있었다. 그러나 SketchPad 및 SpaceWars와 같은 선구적인 노력의 도움을 받아 컴퓨터 디스플레이가 유비쿼터스화 되고 그들과 함께, 대화형 그래픽 사용자 인터페이스의 새벽이 열렸다.

728x90
반응형

'컴퓨터공학 > 기초' 카테고리의 다른 글

3D 그래픽  (0) 2022.10.02
그래픽 유저 인터페이스(GUI)  (0) 2022.09.24
키보드 & 명령 라인 인터페이스(CLI)  (0) 2022.09.12
압축  (0) 2022.09.09
파일 & 파일 시스템  (0) 2022.09.04

댓글