2012-08-01 4 views
12

PowerVR OpenGL ES 2 SDK를 사용하여 Windows에서 C++로 내 게임을 개발하면 Android 또는 iphone으로 이식 할 수 있습니다.OpenGL ES 2에서 텍스트를 그리는 올바른 방법

모두 괜찮아 보이지만 이제는 텍스트 렌더링이 붙어 있습니다. C++을 사용하여 OpenGL ES 2.0에서 텍스트 (TTF 또는 비트 맵 글꼴 사용) 렌더링에 대한 자세한 자습서를 찾을 수 없습니다. Java 또는 objective-c (textview, surfaceview 또는 그럴싸한 것들을 사용하여)를 사용하여 안드로이드 또는 iphone에서 텍스트를 렌더링하는 것에 대한 많은 주제를 찾았지만 필요한 것은 아닌 것 같습니다. "크로스 플랫폼 솔루션"이 필요합니다.

(? 또는 내가이 시점에서 잘못된 생각 일 수 있음) 약간의 연구 후, 나는 내 마음의 솔루션이 있습니다

로드 및 바인드 비트 맵 폰트 텍스처 ->구문 분석 텍스트와 생성하고 바인딩 정점 배열, 자외선 배열과 매핑 질감, ... ->을 렌더링은

내가 아직 테스트 아니에요 화면합니다하지만 난 내 솔루션을 사용할 때이 문제가 생각 : I가 (텍스트를 변경하려는 경우 예 : 사용자 점수 또는 화면의 타이머를 만들고 있습니다.) 꼭 꼭지점 배열과 uv 배열을 다시 바인딩해야합니다. 그렇지 않습니다. 좋은 생각이지?

OpenGL ES 2에서 화면에 비트 맵 글꼴을 그릴 수있는 더 좋은 방법이 있습니까?

답변

2

텍스트 렌더링은 조만간 3D 라이브러리 세계에서 얼굴을 마주 할 필요가있는 주제 중 하나입니다.

인터넷에서 텍스트 렌더링에 대한 많은 자습서가 있으며 많은 책에서 이에 대해 이야기하고 있습니다. 나의 충고는 주위를 둘러보고 어떻게 작동하는지 이해하려고 노력하는 것이다.

TTF 글꼴은 실용적인 솔루션이 아닙니다. 컴퓨터 게임과 같은 실시간 컴퓨팅 시나리오에서 TTF의 기하학 기반 기술은 너무 많은 리소스를 소비하기 때문입니다.

매우 일반적인 솔루션 (예 : 내 PATRIA 3D 엔진에서 사용하는 솔루션)은 다른 문자의 글리프가 포함 된 텍스처 아틀라스를 사용하는 것이므로 애플리케이션 로직이 텍스트 -> 글리프 위치 관계를 처리해야합니다 최종 "화면 텍스트"를 구성 할 쿼드의 텍스처링을위한 것입니다. 이 크기 커닝/간격/다른 텍스트와 같은 주제를 포함하기 때문에

텍스트 렌더링 간단한 주제없는 등 가장 (주제를 이해하기 위해이 링크를 따르지

시도 내가 잘못 아니에요 경우이의 저자 위키는이 커뮤니티의 정회원입니다.) 당신이 언급

http://en.wikibooks.org/wiki/OpenGL_Programming/Modern_OpenGL_Tutorial_Text_Rendering_01

4

이 솔루션은 이동하는 방법, 그리고 텍스트를 수정하면 실제로, 당신은 그것을 나타내는 형상을 다시해야 및 OpenGL에 다시 제출합니다.

이 레크리에이션 단계는 다소 시간이 걸리지 만 과도하지는 않습니다.

  • ,이 텍스처를 사용하여 텍스트를 그릴 비트 맵
  • 텍스쳐 아틀라스 만들 폰트 메트릭스를 고려 (크기, 자간 등 : 텍스트를 렌더링하는

    이 문제는 두 가지 주요 구성 요소가 있습니다) 가능성이 서브 픽셀 안티 앨리어싱

  • 텍스쳐 아틀라스를 만들려면

, 당신은 주위에 (아마도 FreeType에서 사용) 또는 (예) AngleCode's bmfont 같은 기존 도구를 사용하는 일부 코드를 찾을 수 있습니다.

그림의 경우 기존 코드를 기반으로 자신 만의 코드를 만들 수 있습니다. 멋진 텍스트를 만들기 위해 많은 세부 정보가 필요할 수 있습니다. 두통을 시작하려면 this article을 살펴보십시오.

현대적인 영감의 근원 중 하나는 Nicolas Rougier's freetype-gl 코드입니다. 또한 밸브로부터 본시 그래프 용지 (반감기 포털 제작자) 참조 https://www.mapbox.com/blog/text-signed-distance-fields/

의 설명 변형 :

+0

누구나 회전을 지원하는 OpenGL ES 2.0 Android 예가 있습니까? – Burf2000

관련 문제