본문 바로가기

OpenGL

쉐이더 아키텍처를 사용하는 OpenGL 프로그래밍에서의 텍스처 매핑 OpenGL에서, 텍스처 매핑(texture mapping)을 사용하는 방법은 고정 처리 파이프라인(fixed pipeline)을 사용하느냐, 쉐이더 파이프라인을 사용하느냐 여부에 따라 달라진다. OpenGL 2.0 이전의 고정 파이프라인 구조에서는 명시적인 glActiveTexture() 사용이 중요한데, 이것은 여러 장의 텍스처를 사용하는 방법은 멀티 텍스처링이 유일하기 때문이다. 반면, 쉐이더 아키텍처를 사용하는 OpenGL 2.0 이후의 구조에서는 생성된 텍스처 개체의 바인딩 대상이 되는 텍스처 유닛과 샘플링 방법만 필요하다. 생성된 텍스처 개체를 바인딩했다면, 쉐이더의 샘플러에게는 어떤 텍스처 유닛이 사용될 것인지 전달하면 된다. 그리고, 이 부분이 가장 중요한데, 상태 설정을 위해 바인딩 되는.. 더보기
OpenGL에서 사용 가능한 최대 텍스처 유닛의 수 알아내기 OpenGL에서, GPU의 멀티 텍스처링(multi-texturing) 지원 정도는 어떻게 알아볼 수 있을까? 국내에서 출판된 OpenGL 프로그래밍 가이드(일명 레드북)는 1.4 버전 기준이기 때문에, GL_MAX_TEXTURE_UNITS에 대한 내용만 언급되어 있을 것이다. GL_MAX_TEXTURE_UNITS를 사용해보면 황당하게 작은 값에 놀랄지도 모르겠다. 그러나, 그 값은 고정 파이프라인에서의 최대 텍스처 유닛 수를 알려주는 값이기 때문에, 잘못된 것이 아니다. 최악의 경우에는 겨우 2개 정도의 텍스처 유닛만 사용 가능할지도 모르지만, 고정 파이프라인 구조로 작성되는 3D 그래픽스 프로그램은 이제 없다. OpenGL 2.0 이상의 구현은 고정 파이프라인 구조가 아니라 쉐이더를 사용하는 구조이며.. 더보기
CS_OWNDC with WGL (OpenGL Extentions for Windows) OpenGL은 대단히 잘 구성되어 있는 크로스 플랫폼 그래픽 라이브러리이지만, 확장 기능(OpenGL Extentions)과 연관된 플랫폼 이식 작업은 그렇게 쉬운 편은 아니다. OpenGL은 플랫폼 의존적인 부분을 표준으로 포함하고 있지 않으며, 윈도우를 생성하는 작업과 같은 하드웨어 의존적인 구현을 여기에 의존하고 있기 때문이다. OpenGL 코드를 다른 플랫폼으로 이식할 때, 렌더링 코드는 수정할 필요가 거의 없지만, 플랫폼 의존적인 벤더 확장 부분을 수정하는 것은 생각보다 잔손이 많이 가는 작업이다. 그 중에서도, 특히 WGL(OpenGL Extentions for Windows, 위글)은 GDI DC(DeviceContext) 관리에 주의해야 할 부분이 있다. 보통, Win32 윈도우를 생성할 .. 더보기
Two Major Graphics Systems : DirectX / OpenGL 현재 가장 중요한 그래픽 시스템은 단연 MS의 DirectX와 크로노스 그룹의 OpenGL이다. 사실, 이 두 그래픽 시스템은 두 번의 통합 기회가 있었는데 모두 무산되었다. DirectX가 초창기 조악한 모습을 벗어나지 못하던 시절, 존 카멕과 같은 게임 개발자들을 위주로 OpenGL을 윈도우의 공식 3D 그래픽 라이브러리로 채택해달라는 요청이 있었지만 MS는 이를 받아들이지 않았다. 그리고 이와 별도로, 고성능 워크스테이션 시장에서 산업계의 표준처럼 쓰이던 OpenGL과, 일반 데스크탑 시장에서 사실상의 표준인 윈도우의 DirectX를 통합하려는 움직임이 있었다. 이것의 결과물로 MS와 OpenGL을 주도적으로 개발하던 SGI는 파렌화이트(Farenhait)라는 프로젝트를 발족하게 되는데, 이들의 통.. 더보기