FTGL의 코드를 살펴본 후 API가 텍스트 렌더링 자체를 수행하도록 고안된 것은 확실합니다. OpenGL 호출을 내부적으로 호출하는 렌더링 함수를 호출해야합니다.
다른 말로하면 FTGL은 텍스처에 글꼴을로드 한 다음 해당 텍스처 개체를 제공하고 사용자가 직접 글리프를 그릴 수 있도록 설계되지 않았습니다. 그렇다고해서 이이 될 수 없다는 것을 의미하지는 않습니다. API가 도움이되지 않습니다.
검은 색으로 표시되는 이유는 GL_ALPHA
텍스처가 액세스 될 때 RGB 구성 요소에 대해 0을 반환하기 때문입니다. 텍스처 환경에서 GL_MODULATE
을 사용하기 때문에 색상의 RGB 부분에 0이 곱해집니다.
의도 한대로하려면 GL_MODULATE
대신 GL_TEXTURE_ENV_MODE
을 GL_COMBINE
으로 설정해야합니다. 즉, 간단하지 않은 combine environment mode을 사용해야합니다. 그들이 존재하자마자 셰이더를위한 고정 함수를 거의 버렸기 때문에, 나는 오랫동안 결합자를 건드리지 않았다. 그래서 소금물로 뒤 따르십시오.
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_PRIMARY_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_REPLACE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA);
은 무엇 당신이 원하는 것은 RGB 부분이 glColor
에서오고 알파 부분은 질감에서 오는 색상을 생성 할 수 있습니다 : 여기에 환경 코드가 어떻게 보일지에서 추측이다. 이것이 당신이하는 방법입니다.
영어로, 첫 번째 줄에는 질감 환경 모드가 "결합"으로되어있어보다 복잡한 작동 모드가 활성화됩니다. 다음 세 줄은 색상의 RGB 부분이 생성되는 방법을 지정합니다. GL_COMBINE_RGB
을 GL_REPLACE
으로 설정하면 소스 RGB 값 0은 출력 RGB가됩니다. GL_SRC0_RGB
에서 GL_PRIMARY_COLOR
으로 설정하면 소스 RGB 값 0이 기본 색상입니다. 즉, 정점 처리에 의해 생성 된 색상입니다 (즉, 조명을 사용하지 않는 한 이것은 glColor
으로 전달한 것입니다). GL_OPERAND0_RGB
을 GL_SRC_COLOR
으로 설정하면 색상을 그대로 유지할 수 있습니다 (수행 할 수있는 특별한 작업이 있습니다 (예 : 1 - the color
또는 무엇이든).
다음 세 줄은 출력 색상의 알파 부분이 나오는 곳으로 설정됩니다.GL_COMBINE_ALPHA
이 GL_REPLACE
으로 설정되면 소스 알파 값 0 (소스 RGB 값 0과 다름)은 출력 알파가됩니다. GL_SRC0_ALPHA
을 GL_TEXTURE
으로 설정하면 원본 알파 값 0이 현재 텍스처 단위의 텍스처에서 비롯된 것입니다. GL_OPERAND0_ALPHA
을 GL_SRC_ALPHA
으로 설정하는 것은 알파를 그대로 사용하는 것을 의미합니다 (이전과 같이 여기에 알파를 적용 할 수 있습니다).
OpenGL 구현에서 ARB_texture_swizzle을 사용할 수있는 경우 스위 즐 마스크를 설정하여 GL_ALPHA
형식을 GL_INTENSITY
으로 효과적으로 변환 할 수 있습니다. 그런 다음 GL_TEXTURE_ENV_MODE
으로 GL_MODULATE
을 사용할 수 있습니다. 그러나 혼합 모드가 glBlendMode(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)
인지 확인해야합니다. GL_MODULATE
은 알파를 색상에 곱하기 때문에이 작업이 필요합니다. GL_ONE
대신 GL_SRC_ALPHA
을 사용한 경우 알파 번을 번 두 번 (텍스처 env 단계에서 한 번, 혼합 단계에서 한 번) 수행합니다.
"라이브러리는 GL_ALPHA 형식의 텍스쳐를 만들어서 글꼴 글리프"Really? 사용할 형식을 선택할 수 없습니까? 그것은 GL 3.1 코어 이상 GL_ALPHA 텍스처가 더 이상 없기 때문에 그럴 수 없다면 불행한 일입니다. –
@ 니콜 : 예, 정말로, 그래서 뭐? 나는 드라이버가 코어를 구현하고 역 호환성을 무시하는 비디오 카드를 전혀 모르고있다. 그건 정말 바보 같은 행동 일 것이고 제조사들은 그것을 알고 있습니다. –
MacOSX 10.7은 호환성을 구현하지 않습니다. 2.1 또는 3.2 * core * 중에서 선택할 수 있습니다. 제거 된 항목에 의존한다는 사실을 무시하더라도 사용자가 원하는 형식에 대한 몇 가지 옵션을 제공해야합니다. 그들은 GL_ALPHA를 사용하기 때문에 텍스쳐 환경과 색상 (아래 참조)을 사용하기 위해 많은 노력을 기울여야합니다. 대부분의 사람들처럼 GL_INTENSITY를 사용했다면 GL_MODULATE와'GL_ONE','GL_ONE_MINUS_SRC_ALPHA'의 혼합 모드를 사용할 수 있습니다. –