![]() Miguel Angel Sepúlveda 필자 소개: 1993년에 워싱턴대학(미국)을 졸업했다. 스페인, 이스라엘, 일본, 미국에서 과학연구 분야에서 일한다. 커널 0.98쯤부터 리눅스를 알게 되었다. (첫눈에 반했다) 현재는 자유 시간에 리눅스 포커스의 편집장으로 일한다. 필자에게 연락하기 들어가는 글왜 리눅스인가?학생상담가들결론 |
OpenGL이란?요약: 이 글은 OpenGL과 리눅스에서 OpenGL을 사용하는 방법에 관한 집중연재기사의 첫번째입니다. 이 기사는 자신의 개발프로그램에 고성능 2차원/3차원 그래픽을 추가하고 싶은 프로그래머를 위하여 쓰여졌다 이 글은 OpenGL과 리눅스에서 OpenGL을 사용하는 방법에 관한 집중연재기사의 첫번째입니다. 이 기사는 자신의 개발프로그램에 고성능 2차원/3차원 그래픽을 추가하고 싶은 프로그래머를 위하여 쓰여졌다. OpenGL은 의심할 여지가 없이 가장 널리 퍼져있는 2차원,3차원 그래픽프로그램 개발 업계 표준 API이다. OpenGL은 SGI사의 웍스테이션을 공학용, 과학용, 또는 특수효과개발용 플랫폼으로 인기있게 만들었던 방대한 Sillicon Graphics사의 IRIS GL라이브러리를 계승한 것으로 인식되고 있다. SGI는 OpenGL을 좀더 쉽게 이용할 수 있고 직관적이며 미래를 대비하여 네트워크까지 고려된 API가 될 수 있도록 많은 전문가를 투입하고 있다. 동시에 우리는 SGI사가 공개표준들의 중요성을 인식하고 있다고 믿을만 하다. 몇몇 하드웨어, 소프트웨어 제작자는 OpenGL의 규정을 정하는데 참여하고 있으며 이를 지원하고 있다. 이 덕분에 OpenGL을 이용한 프로그램은 현재 시장에 나와 있는 가상적인 어떠한 플랫폼으로도 쉽게 이식되어질 수 있다. 이미 Windows95를 사용하는 개인용컴퓨터에서 우리들의 자랑스러운 리눅스시스템, 고성능 유닉스 워크스테이션뿐만 아니라 메인프레임급의 슈퍼컴퓨터까지도 쉽게 이식된다. Architectural Review Board를 살펴보면 OpenGL의 규약과 변화된 것이 수용되었는지 또는 거부되었는지 제안된 것이 검사에 일치한지 등을 알 수 있다. 이전 SGI사의 IRIS GL라이브러리와는 달리 OpenGL은 플랫폼이나 운영체제에 독립적으로 설계되었다. 이러한 점은 네트워크를 고려한 결과이며 실제 OpenGL응용프로그램이 있는 서버와 그래픽랜더링작업을 수행하는 클라이언트가 분리되어 있는 것도 가능하게 된다. 서버와 클라이언트에서 네트워크를 이용하여 OpenGL명령어를 전달하도록 하는 프로토콜이 있다. 운영체제에 독립적인 성격으로 인하여 서버와 클라이언트가 동일한 플랫폼일 필요는 없다. 일반적으로 서버는 매우 복잡한 시뮬레이션을 수행하는 슈퍼컴퓨터이며, 클라이언트는 그래픽을 보여주는 작업만을 담당하는 간단한 워크스테이션일 경우가 많다. 또한 개발자는 OpenGL을 이용하면 많은 플랫폼에서 작동하는 프로그램을 개발할 수 있다. 위의 내용에서와 같이 OpenGL은 최신의 고성능 그래픽 랜더링 라이브러리이며 OpenGL의 기본요소를 하드웨어수준에서 수행하는 특별한 3차원 카드나 가속기능이 장착된 그래픽카드도 개발되어 있다. 현재까지 발전된 그래픽카드들은 매우 고가였으며 SGI웍스테이션이나 UNIX웍스테이션에서만 사용할 수 있는 것이 대부분이었다.실리콘그래픽사의 관대한 라이센스정책과 드라이버 개발킷덕분에 매우 빠른 변화가 이루어져 이제는 PC사용자를 위한 OpenGL하드웨어가 점점 늘어나고 있다. 리눅스사용자 역시 이런 기회를 잘 이용하여 즐길 수 있다. 바로 3Dfx Interactive사가 3차원 그래픽카드 시리즈를 제공하고 있으며 Glide 라이브러리를 이용하여 리눅스운영체제를 지원하고 있다. 여기에 관해서는 Phillip Ross씨가 쓴 다른 기사(3Dfx 그래픽카드)를 살펴보기 바란다. 그 글에서는 3Dfx카드를 이용하는 방법을 자세히 설명하고 있다. 이러한 사실은 대부분의 하드웨어생산업자들이 리눅스 시장성을 인식하여 태도의 변화를 보이고 있다는 것을 단적으로 보여준다. 리눅스지지자들은 이러한 변화를 지지하며 격려한다. OpenGL은 하드웨어 독립성을 얻기 위하여 윈도우 작업에 관련된 명령이나 사용자의 입력을 받는 부분은 빠져있다. 어떻게 보면 OepnGL을 사용하는데 중요한 단점이 될 수 있다. 그러나 이점에 대해서는 별로 걱정할 필요없다. (GLUT 프로그래밍 연재를 읽어보기 바란다.) 윈도우와 관련된 작업이나 사용자 입력을 획득하는 것을 담당하는 유연한 다른 프로그래밍 라이브러리를 이용하여 OpenGL응용프로그램을 개발할 수 있다. 또한 OpenGL은 분자,비행기,집,새등과 같이 복잡한 모델을 서술하는 명령어를 제공하지 않는다. 그래서 여러분은 가장 기본적인 기하학적 형상인 점과 선, 그리고 다각형을 이용하여 여러분의 모델을 나타내야 한다. 복잡한 모델을 사용할 수 있도록 해주는 OpenGL관련 라이브러리가 있으므로 이를 이용하면 된다. OpenGL프로그래밍에 관한 연재기사들에서는 C인터페이스를 사용할 것이다. C는 가장 인기있는 OpenGL의 프로그래밍 환경이다. 그러나 여러분은 FORTRAN, C++, Ada, Java와 같은 언어를 사용하여 프로그램을 작성할 수 있다. 이 연재를 진행해 가면서 OpenGL을 위한 C인터페이스를 충분히 익힌 다음 OpenGL의 C++확장 라이브러리인 Open-Inventor에 대해서도 살펴보겠다. 간단하게 OpenGL의 실행특징 몇가지를 살펴보자:
이미 말했었지만 OpenGL을 이식성이 높고 플랫폼에 독립적으로 작동하게하려면 윈도우시스템과의 인터페이스를 담당하는 모든 명령어를 희생할 수밖에 없다. 예를 들어 새로운 창을 열거나 닫거나, 창의 크기를 줄이고 늘이고, 창의 모양을 다르게 하고 커서의 위치를 구하며, 사용자로부터 키보드 입력을 받는 것이 생략되어 있다. 이러한 기능은 운영체제에 깊이 관련되어 있다. 원래 GL라이브러리는 자신이 창과 부가장치를 다루기 위한 특별한 명령어를 가지고 있었다. 그것은 SGI사의 UNIX운영체제에서 작동하는 IRIX에 해당될 뿐이었다. 결국 자신이 사용하는 운영체제에서 창을 다루고 관리하는 것은 OpenGL개발자가 자신의 플랫폼을 얼마나 알고 있는가에 달려있다. SGI사의 Mark J. Kilgard씨 덕분에 이러한 문제를 해결해주는 부가라이브러리가 개발되어 있다. Mark씨는 이전의 AUX라이브러리(AUX라이브러리가 무엇인지 생각하지 말고, 그냥 잊어버리세요!)를 대체할 수 있는 GL유틸리티 라이브러리인 GLUT라이브러리를 개발하였다. GLUT라이브러리는 자유롭게 이용이 가능하다.OpenGL과 마찬가지로 리눅스용으로 된 바이너리 버전이나 소스코드를 구할 수 있다. GLUT라이브러리는 플랫폼에 의존적이며 윈도우와 부속장치등을 다루기 위한 공통적인 패러다임을 제공해 준다. 따라서 OpenGL프로그램에서 그래픽 애니메이션을 위한 새로운 창을 하나 열고자 할때 GLUT명렁어를 이용하면 작동하는 윈도우시스템에서 이러한 작업을 수행해준다. 쉽게 말하면 GLUT는 개발자가 특정한 윈도우시스템(X11,윈도우즈,모티프..등등..)을 다루기 위한 지저분할 정도로 자세한 부분을 알필요가 없게 이러한 부분을 감추어 주므로 관심있는 작업-OpenGL코드-에만 계속 집중하면 되는 것이다. GLUT를 이용할 때 또다른 좋은 점은 여러분의 코드가 플랫폼에 독립적이라는 것이다. 필자는 개인적으로 GLUT와 OpenGL을 사용하여 단백질과 젤의 시뮬레이션을 개발한 적이 있는데 아무런 문제없이 단 한줄의 플랫폼 의존코드없이 인텔기반 리눅스, 알파기반 리눅스, 윈도우즈95에서 잘 컴파일 되어 실행할 수 있었다.(솔직하게 말하면 필자는 종종 윈도우즈 95를 사용한다) 필자는 여러분이 OpenGL응용프로그램을 개발하는데 관심이 있다면 윈도우환경을 다루기 위하여 GLUT라이브러리를 이용하라고 강력히 추천하는 바이다. GLUT를 어떻게 사용하는지 확실히 아는 것은 OpenGL을 배우는데 배우 중요하다. 그래서 리눅스포커스의 OpenGL에 관한 연재기사에서는 단계별로 GLUT를 어떻게 사용하는지, 그리고 어떻게 부가장치를 다룰 수 있는지에 대해 여러 기사를 통해 살펴볼 것이다. 글을 마치기 전에 "위대한 장인" Brian Paul씨에 대한 소개를 빼놓아서는 안될 것이다. 그는 꾸준히 리눅스에서 OpenGL과 같이 작동하는 라이브러리인 Mesa를 개발해 오고 있다. 현재 Mesa는 소프트웨어에 의해서만 랜더링 작업을 수행하므로 랜더링작업을 수행하는데 걸리는 시간은 CPU의 성능이나 3차원관련 하드웨어의 성능에 달려 있다. 그러나 Mesa는 하드웨어가속기용 드라이버를 사용할 수 있도록 해주는 훅(hook)기능을 내부적으로 수행한다.. 현재 Mondello, S3 Virge (Win95용만), GLINT,Voodoo 3Dfx칩 계열만 이런 드라이버가 나와있다. David Bucciarelli씨가 Voodoo용 드라이버를 개발해 준 덕분에 고가의 SGI웍스테이션과 동일한 성능수준까지 Mesa에서 이용할 수 있다. 만약 고성능의 3차원 그래픽을 수행하고자 한다면 바로 3Dfx칩을 사용하는 그래픽카드를 구입하기 바란다. 첫번째 연재를 끝맺으면서 필자의 알파컴퓨터(21164 550MHz, 164MRam, Linux 2.0.32)에서의 경험을 이야기 하겠다.필자는 Mesa라이브러리를 이용하여 젤 시뮬레이션 프로그램을 개발하였다. Glide라이브러리가 현재까지 알파용으로는 개발되어 있지 않다.(빨리 좀 만들어 주지...) 음. 필자와 Phil Ross씨는 Matrox Millennium카드를 장착한 필자의 알파컴퓨터와 Rhil씨의 3Dfx카드를 장착한 펜티엄 컴퓨터에서 동일한 젤 애니메이션을 실행시켜보았는데 놀랍게도 Phil의 컴퓨터에서 실행되는 만큼 필자의 컴퓨터에서도 부드럽게 애니메이션이 실행되었다. 심지어 OpenGL데모프로그램은 필자의 컴퓨터에서 더욱 성능이 우수하였다(물론 이때 텍스쳐기능은 사용하지 않았다.) 이 말은 결국 OpenGL을 지원하지 않는 하드웨어의 부족을 알파CPU의 강력한 성능이 보완해준다고 볼 수 있다. 젤 애니메이션의 각 프레임은 10개의 젤 모델구조를 그려주는데 각 모델은 1000개의 구와 실린더에 모두 광원계산을 실행하는 애니메이션이다. PC에서는 빈약한 Intel CPU의 기능때문에 계산을 많이 수행하지 못하여 많은 단량체(화학용어)들을 가진 젤을 볼 수 없었지만...반면 알파컴퓨터에서는 아무 문제가 없었다! 필자는 3Dfx를 장착한 알파컴퓨터와 Mesa를 지원하는 하드웨어를 기다릴 수 밖에 없다.
더 자세히 알고싶은가요?:
번역 : 이주호
|
본 웹사이트는 Miguel Angel Sepulveda씨에 의해 관리됩니다. © Emre Demiralp 1998 LinuxFocus 1998 |