2009-08-23 5 views
2

디스플레이 용 OpenGL을 사용하는 게임 엔진이 있습니다. 작은 메뉴를 코딩 한 다음 텍스트를 렌더링 한 후 이상한 것으로 나타났습니다. http://img43.imageshack.us/i/garbagen.png/OpenGL : 왜곡되지 않은 텍스처가 2로 나눌 수없는 경우

본 것처럼 글꼴은 다소 읽을 수 있지만 아래 부분 (예 : '테스트')은 의도 한 것처럼 보입니다. 가장자리가 잘 리므로 화면의 위치가 가독성에 영향을주는 것으로 보입니다. 글꼴은 9x5입니다. 폭/높이를 얻기 위해 2로 나누고 중심에서 개체를 렌더링하는 값입니다. 그래서 4.5x2.5 픽셀 (x, y, 너비와 높이가 간단한 직사각형의 수레를 사용합니다)에서 x.5 정도가 아닌 다른 곳으로 렌더링하면 텍스처가 엉망입니다. 그러나 지금은 두 대의 컴퓨터에서만 그렇게합니다. 그러나이 오류는 텍스트를 읽을 수 없게 만들어 버리기 때문에 싫습니다. 나는 그것을 4.55x2.55 (2로 나눌 때 약간의 여분의 크기를 추가함으로써) 만들 수 있고, 모든 기계에서 적절하게 렌더링한다 (적어도 문제가있는 두 가지 경우에는 적어도 그렇게 자주 일어나지 않는다). 그러나 나는 이것을 두려워한다. 해킹이 너무 심해서 문제를 완전히 해결할 수 없으며 텍스트를 위로 올려서 글꼴을 보이게 만들 수도 있습니다. "뚱뚱한". 내 질문은 ... 내가 이것을 방지 할 수있는 방법이 있으며 정수로 그 값을 교환하지 않는 것입니까? (나는 약간의 차이가 필요하다. 두 너비/높이가 2로 나눌 수있는 너비와 높이가 아닌 너비와 높이를 다르게 처리 할 수 ​​있습니까? 그것이 실제로 비디오 카드 문제라면, 그것을 피할 수 있습니까? 죄송합니다. 질문이 없으면 인터넷에 자주 질문하는 것에 의지하지 않으며 코딩 연구도하지 않습니다. 필자는 필요할 수있는 코드 나 코드를 제공하게되어 기쁩니다.

답변

0

정수가 아닌 좌표에 텍스트를 그려야하는 경우 텍스처 필터링을 사용하도록 설정해야합니다. glTexParameterfv을 사용하여 GL_TEXTURE_MIN_FILTERGL_TEXTURE_MAG_FILTERGL_LINEAR으로 설정하십시오. 텍스트는 흐려 지지만 픽셀 완전 (= 정수) 좌표를 사용하지 않으면 피할 수 없습니다.

0.05 해결 방법은 유효 좌표가 정수로 반올림되는 방식을 변경한다는 점에 유의하십시오. 텍스처 필터링을 GL_NEAREST 사용할 때 반 화소 오프셋과 같은 것은 없습니다. 이 좌표를 지정해도 텍스처 필터가 반올림합니다. 추가 0.05로 올바른 방향으로 밀면됩니다.

+0

필자는 필터링으로 완전히 파괴 된 역 (16 비트와 같은) 느낌을 얻으려고합니다. 그러나 귀하의 회신은 해결책을 제시해주었습니다. 예, 스케일링을 돕기 위해 0.05를 더했습니다. 그러나 노출 한 방법을 읽을 때 참으로 "올바른 방향으로 밀어 넣기"만하면됩니다. 고맙습니다. –

0

최고의 신뢰성을 위해 분수를 제거 할 수있는 방법을 찾았습니다. 나는 XNA와 MDX에 대해서만 약간의 경험이 있기 때문에, 좋은 이유가 있는지 모르겠다.하지만 왜 코너가 아닌 중심으로 갈 것인가?

+0

저는 XY 위치를 사용하여 모든 히트 박스와 회전 센터를 가운데에 배치합니다. 나는 그것이 정상적인 방법이라고 생각했다. 사실 ...어쩌면 모든 것을 번역 할 수 있고 구석 구석을 그릴 수도 있습니다. –

+0

회전은 확실히 의미가 있습니다. 나는 어쨌든 2의 배수와 항상 찔렀다. 나는 물건이 픽셀 경계에 떨어지지 않을 때 어떤 일이 일어나는지에 대해 편집증을 가지고 있습니다. 강제 앤티 앨리어싱과 텍스처에 부드럽게하는 것과 같은 문제가 있습니다. – snarf

0

이는 OpenGL에서 어려울 수 있습니다처럼 때문에 다른 해상도에 픽셀 완벽한 물건을하려고 텍스처 필터링 등

당신이 시도 할 수있는 몇 가지 :

  • 하나 개의 큰 텍스처로 글꼴을 그리기를 (512x512).
  • 알파 채널 (투명도)을 사용하여 필요 이상으로 큰 글리프 그리기 및 앤티 앨리어싱을 그립니다.
  • 각 글리프 주위에 빈 공간 (4 또는 8 픽셀)을 그대로 둡니다. DOS에서 소프트웨어 렌더링을 위해 글꼴을 그리는 것처럼 서로를 서로 밀어 붙이면 필터링을 통해 서로에게 피가 흘러 나옵니다.
  • 다른 방법을 사용하여 선분을 구분할 수 있습니다. 이것은 당신이 다루고있는 저울의 폰트에서 더 잘 작동 할 것입니다.
관련 문제