OpenGL에서 텍스트를 렌더링하는 기본 방법 [닫기]


17

대학 프로젝트를 위해 다시 컴퓨터 그래픽을 선택하려고합니다. 이전 프로젝트에서 나는 FTGL 이라는 라이브러리를 사용 했는데 무거운 느낌이 들었 기 때문에 만족스럽지 못했습니다 (많은 렌더링 기술을 시도했지만 텍스트 렌더링의 크기가 제대로 조정되지 않았습니다).

내 질문은, 이것에 대한 좋고 효율적인 라이브러리가 있습니까? 그렇지 않다면 빠르고 멋진 텍스트를 구현하는 방법은 무엇입니까? 의도 된 용도는 다음과 같습니다.

  • 유동 객체 / 문자 라벨
  • 대화
  • 메뉴
  • HUD

편집 : 바람직하게는 글꼴을로드 할 수도 있습니다


1
이것은 "어떤 기술을 사용 하는가"이므로 폐쇄해야합니다.
Laurent Couvidou

답변:


4

대중적인 프레임 워크는 Crazy Eddie의 GUI 입니다.

그러나 그것이 매력적이지만, 자신의 것을 굴리는 것은 드문 일이 아닙니다 (나중에 범위가 증가함에 따라 후회합니다)

비트 맵에 글리프를 배치 한 다음 OpenGL을 사용하여 비트 맵을 그리는 것이 일반적입니다.

때로는 소수의 프레임에만 나타날 수있는 일시적인 텍스트가 표시됩니다. GL_QUADS + glVertex 만 사용하면 충분합니다. 그러나 많은 양의 텍스트 또는 긴 가시성에 대해 GL_QUADS를 VBO에 넣을 가치가 있습니다. 이로부터 성능이 크게 향상되었습니다.

물론 실제 글리프를 생성해야한다는 문제가 있습니다. bmfont 와 같은 프로그램 을 사용할 수 있습니다. 또는 주문형 자유형과 같이 좀 더 복잡한 렌더링이 필요할 수 있습니다. 나는 내 자신의 렌더러와 함께 bmfont를 아주 행복하게 사용했습니다. 추론하기는 매우 간단합니다.


9

원하는 방식에 따라 다양한 방법이 있습니다. 다른 곳과 마찬가지로 "최고의 솔루션"과 같은 것은 없습니다. 어떤 플랫폼이 목표입니까? 어떤 언어를 사용하고 있습니까? 텍스트 크기 조정 / 회전이란 무엇입니까? TrueTypeFonts를 렌더링 할 수 있어야합니까? 다국어 / 유니 코드는 어떻습니까? 텍스트 (인코딩 등)를 어떻게 저장 하시겠습니까?

나는 과거에도 FTGL뿐만 아니라 순수한 자유 형식 (http://www.freetype.org/ FTGL은 이것을 기반으로 함), 다른 종류의 비트 맵 글꼴, 개요 글꼴을 사용했습니다 ... 지금은 주로 비트 맵에 중독되어 있습니다. 글꼴, 그러나 그것은 내 개인적인 취향입니다. 다른 문자셋, 인코딩 및 그와 같은 것들을 다루고 싶지 않기 때문에 비트 맵 글꼴에 대한 라이센스도 TrueTypeFonts보다 쉽고 저렴합니다. 이미지를로드 할 수있는 모든 플랫폼에서 사용할 수 있습니다. OpenGL에서 쿼드를 사용하고 텍스처의 일부를 매핑합니다. 다른면은 다음과 같습니다. 글꼴은 +/- 50 % 정도만 깔끔하게 크기를 조정할 수 있습니다. 그걸로 살 수 있다면 비트 맵 글꼴을 사용하는 것이 좋습니다.

다른 인코딩 / 문자 세트를 처리 해야하는 경우 TrueTypeFonts를로드하고 사용하는 방법을 찾아야합니다 (자유형, 다른 라이브러리 또는 자체 구현 사용).

또한이 주제에 대한 다른 자습서를 살펴보십시오.

http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=13 비트 맵 글꼴

http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=14 개요 글꼴

http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=15 텍스처 매핑 외곽선 글꼴

http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=17 2D 텍스처 글꼴

행운을 빕니다!


+1 성능에 관한 귀중한 정보에 감사드립니다. 저는 NeHe의 튜토리얼에 대해 알고있었습니다. 비트 맵 글꼴을 사용했다고 생각하지만 크기가 조정되지 않았습니다. 구로 연결된 구 위의 장면에 약 60 개의 레이블이 떠 있습니다. (나는 플라이급 패턴을 구현하는 방법을 찾아야한다고 생각했다)
dukeofgaming

1
주의 : NeHe의 튜토리얼은 기존의 고정 기능 파이프 라인을위한 것이며 자주 업데이트되지 않습니다. 최신 OpenGL 솔루션을 찾고 있다면 stackoverflow.com/questions/5262951/…
brita_

6

비트 맵 글꼴을 사용하려는 경우 Angelcode 비트 맵 글꼴 생성기 ( http://www.angelcode.com/products/bmfont/

트루 타입 글꼴을 멋지게 압축 된 글리프가있는 하나 이상의 텍스처로 변환하고 UV 및 간격이 포함 된 작은 파일을 출력합니다 (XML 출력이 특히 작업하기 쉽고 간격 데이터의 품질이 일반적이라는 것을 알았습니다). 진정한 커닝 없이도 아주 좋습니다)



0

QML을 고려하십시오 . 사용하기 쉬운 구문을 갖춘 완전한 기능을 갖춘 UI 라이브러리입니다. 이 기능은 필자의 경험상 CEGUI보다 훨씬 뛰어나며 주요 대상은 데스크톱 응용 프로그램이고 오프 스크린 렌더링 기능은 일종의 보너스이기 때문에 더 나은 문서화, 지원 및 커뮤니티를 제공합니다.

장점 :

  • 모든 렌더링에 백엔드에서 OpenGL을 사용합니다.
  • 호스트 시스템에서 사용 가능한 모든 글꼴을로드 할 수 있으며 리소스로 포함하는 추가 글꼴을 구문 분석 할 수도 있습니다
  • 효율적이고 고품질의 출력을 위해 부호있는 거리 필드 텍스트 렌더링을 사용합니다.
  • 그것은 수 있습니다 직접 렌더링 쉽게 게임 환경에 결과를 배치 할 수 있도록, OpenGL은 텍스처에
  • Qt에는 많은 언어 바인딩이 있습니다.

단점 :

  • Qt는 큰 프레임 워크입니다
  • Direct3D 또는 Vulkan 프로젝트에서 QML을 사용하려면 GL 텍스처를 적절한 API로 가져 오기 위해 후프를 뛰어 넘어야합니다 (또는 누군가가 QML 용 네이티브 D3D / Vulkan 렌더러를 작성하기를 기다리는 중)
  • QML에는 목록 항목에 대한 드롭 다운을 열려고 할 때와 같이 오프 스크린 화면으로 렌더링하는 경우에도 기본 컨트롤을 사용하려고하는 약간의 단점이 있습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.