■ OpenGL: Text in OpenGL
OpenGL에서 기본적으로 텍스트를 표혆기 위한 3가지 방법이 존재함[1]
1. Raster Fonts.(래스터 폰트)
정의: 글자 크기에 해당하는 사각형 그리드의 픽셀에 1과 0으로 표현
사용함수: glBitmap or glDrawPixels
단점
가. 각 폰트를 묘사하는 데이터들이 CPU에서 그래픽 카드로 전송된다.(매 프레임의 모든 글자들에 대해)
- 이 것은 주요 대역폭에 도달할 수 있다. 즉, 활당된 대역폭을 모두 사용할 수 있다. 라는 의미?!
무한 스펙트럼 중에서 이 부분을 주요 스펙트럼(significant spectrum)이라 부르고 그 대역폭을 주요대역폭(significant bandwidth)이라 부른다.[2]
나. OpenGL 구현에서 래스터 폰트를 CPU와 프레임 버퍼 사이 이미지 데이터를 'swizzle' 해야한다. 즉, 래스터 폰트를 프레임 버퍼에서 CPU로 보내기 위해서 이미지데이터를 휘져야(가공해야)한다. 복잡해지겠징!
다. 많은 3D 그래픽 칩들은 모든 bitmap을 그리기 위해 설계되지 않았다.
- OpenGL 소프트웨어 드라이버는 3D 하드웨어가 폰트를 완벽하게 그릴때 까지 대기해야 함
라. Bitmaps과 Drawpixels는 스크린 edges에 평행으로 배치된다.
- 텍스트 회전은 불가능함
마. Bitmaps과 Drawpixels의 크기변환(Scaling)이 불가능함
장점:
가. 오직 소프트웨어 OpenGL 구현임(즉, 하드웨어 제어를 안함)
나. 다른 텍스트 표현 방법 보다 빠르다.
=============================================================
래스터 폰트(Raster Font 또는 Bitmap Font)
* 글자 크기에 해당하는 사각형 그리드의 픽셀에 1과 0으로 표현
* 메모리 내에서 비트맵에 대한 연산으로 처리하므로 출력 속도가 매우 빠르다
* 제작은 용이하나 확대하면 계단현상(Aliasing)
* 글자의 확대, 회전, 밀림 등 기하변환은 매우 어려우며 변환시 출력 품질 저하
http://ask.nate.com/qna/view.html?n=8363704
=============================================================
http://wordnetweb.princeton.edu/perl/webwn?s=raster+font&sub=Search+WordNet&o2=&o0=1&o8=1&o1=1&o7=&o5=&o9=&o6=&o3=&o4=&h=0
S: (n) screen font, raster font (the font that is displayed on a computer screen) "when the screen font resembles a printed font a document may look approximately the same on the screen as it will when printed"
=============================================================
위 그림과 같이 일반적으로 콘솔에서 나타는 폰트들이 래스터폰트이며, 사각형 그리드의 1과 0으로 폰트가 구성된다.
왜 레스터 폰트인가? 레스터란
[컴퓨터] 점방식 ((음극(선)관 등의 화면 위의 화상을 만드는 데 쓰이는 수평선의 집합))
즉, 점방식으로 이루어진 폰트이다.
2. Geometric Fonts.
지오메트릭 폰트란 기하학적 원형(Geometric Primitive) 선, 삼각형, whatever을 사용하여 만든 폰트를 말한다.
단점:
가. 때론 폰트를 만드는데 많은 수의 삼각형이 필요할 수 있다. 더 많은 기하학적인 원형을 쓰면 더 보기 좋은 폰트를 만들 수 있으나 그리기 위한 처리과정이 많아지기 떄문에 성능이 떨어진다.
나. 폰트를 디자인 하는 것이 어렵고 비용이 들어간다.
다. 폰트의 가장자리 색 넣기, 그림자 넣기 등은 위 두가지 문제점을 항상 동반한다.
장점:
가. 지오메트릭 변환가능: 회전, 크기변환, 위치변환 기타(twisted, morphed, extruded)
나. 폰트에 이쁜 장식을 할 수 있다. (fancy lighting models, environment mapping, texturing, etc.)
다. 3D 폰트를 만들게 되면 공간내 객체들간 폰트사이 충돌감지(collision detection) 가 가능함
라. 정밀하게 scale 가능. 폰트가 가변할때(커지거나 작아질때) 에일리어징 현상(aliasing artifacts)이 일어나지 않아 깨끗하게 보이며, 흐려지지 않는다.
3. Texture-Mapped Fonts.
텍스쳐-맵핑된 폰트란 말그대로 도형애 폰트를 입히는(텍스쳐) 것을 말한다.
모든 폰트들은 하나 또는 그 이상의 텍스쳐 멥에 매핑되고 각각의 폰트를 단일 사각형 안에 그려짐
단점:
가. 폰트를 표현하고자 하는 공간이 필요함.
- 만약 대소문자를 표현하기 위해서는 적당한 공간을 선언해야 이쁘게 보이는데 하드웨어에서 지원하는 텍스쳐 맵 크기는 제한되어 있음(eg 3Dfx Voodoo's can only render maps up to 256x256)
나. MIPmapping를 사용할 경우 크기변환한 폰트가 흐리게 보일 수 있음. 머 사용안해도 horribly aliasy하게 보임
장점:
가. 폰트에 모든 색상 적용이 가능함
나. 지오메트릭 변환 가능(회전, 크기변환, 위치 변환 등)
다. 3D 공간에서 그리게 되면 조명 빨도 받을 수 있음
라. 엄청 빠른 말그대로 그냥 도형에 폰트를 텍스쳐 하기 떄문에 다른 폰트들 보다 빠르다고 함.
That's probably an order of magnitude faster than either Raster or Geometric fonts. Since low-end 3D hardware is highly optimised to drawing simple textured polygons, speed is also enhanced because you are 'on the fast path' through the renderer. (CAVEAT: On software-only OpenGL's, textured fonts will be S-L-O-W.
결론: OpenGL에서 가장 좋은 Font를 선택하는 방법이 없음 때문에 입맛에 맞게 쓰는데 나는 Texture-Mapped Fonts 가 맘에 든다.
[1] http://sjbaker.org/steve/omniv/opengl_text.html
[2] http://book.naver.com/bookdb/text_view.nhn?bid=145783&dencrt=5NID6e%252BU%2539UharxJBk1jMf5urBnXk6DOMyT87AwM0%252BxY%253D&term=significant+bandwidth&query=significant+bandwidth
'OpenGL' 카테고리의 다른 글
Visual Studio: Setting FreeType Library (0) | 2014.05.16 |
---|---|
OpenGL: Modern OpenGL Tutorial Text Rendering 01 (0) | 2014.05.15 |
OpenGL: Selection and Picking (0) | 2014.05.05 |
OpenGL: Normal Vector (0) | 2014.05.04 |
OpenGL: Index of Vertex Array (0) | 2014.05.04 |