2010-06-18 5 views
2

최근 OpenGL 프로그램이 nVidia Quadro 140 카드가 장착 된 2 년 된 Lenovo 노트북에서 텍스처를 올바르게 렌더링하지 못하는 문제가 발생했습니다. OpenGL 2.1.2 및 GLSL 1.20을 실행하지만 밉 매핑을 설정하면 전체 화면이 경고 또는 오류없이 검은 색으로 표시됩니다.OpenGL에서 밉맵 가용성을 확인하는 방법은 무엇입니까?

이 내 텍스처 필터 코드 : 주위 하구의

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE); 

40 분 후, 내가 밉 맵핑을 볼 수있는 문제였다. 그것을 끄면 :

// glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
// glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE); 

나는 많은 앨리어싱을 얻지 만, 적어도 프로그램은 보이고 잘 돌아 간다.

마지막으로, 두 가지 질문 :

  1. 밉 매핑의 OpenGL 버전을 확인 제외하고, 기계에 사용할 수 있는지 확인하는 가장 좋은 또는 표준 방법은 무엇입니까?
  2. 밉 매핑을 사용할 수없는 경우 별칭을 사용하지 않는 것이 가장 좋습니다.

편집 :

어떻게 programmactically 밉 매핑 플랫폼에서 사용할 수 있는지 확인합니까 :

여기에 정말 후 해요 질문입니까?

+0

텍스처의 내부 형식과 크기는 무엇입니까? 일부 형식은 처음으로 확장 기능 (예 : 부동 텍스쳐, 2의 비 텍스처)에서 도입되었을 때 이상한 제한이 있지만 GL 2.1.2는 대부분의 _just 작업을 필요로합니다 _... – Bahbar

+0

@Bahbar : 저는 단지 '512x512'에서'.bmp' 파일을 사용합니다. 'GL_UNSIGNED_BYTE'를 사용하고 있습니다. –

+0

허. 그건 그냥 작동해야합니다. 나는 구현의 버그에 걸 겠어. – Bahbar

답변

3

는 OpenGL을 1.4 자동 밉맵 세대 (사용 GL_GENERATE_MIPMAP)에 대한 지원이 필요하며, 텍스처링 사용하여 밉맵은 거기에 거의 모든 그래픽 카드에 사용할 수 있습니다. 문제가 밉 매핑 기능이 누락되어 있지 않을 수도 있습니다. 밉맵이 생성되었을 수 있습니다. 목적을 디버깅하기위한 목적으로 을 사용하여 밉맵을 생성 해 볼 수 있습니까?

이 문제가이 그래픽 카드/구성에만 해당되는 경우 업데이트 된 드라이버를 확인하는 것이 좋습니다.

앨리어싱을 없애는 좋은 방법은 multisampling입니다.

+0

'gluBuild2DMipmaps()'- 네, 시도해 볼 수 있습니다. 그러나 그것은 내 기계가 아니므로 아마도 몇 달 동안 결과를 듣지 않을 것입니다. 그러나 나는 그것을 염두에 둘 것이다, 고마워! –

+1

멀티 샘플링은 삼각형 안의 텍스처 앨리어싱을 피하기 위해 아무 것도하지 않습니다. 다각형 경계에만 영향을 미칩니다. – Bahbar

+0

@Bahbar, 아마도 @Greg는 훌륭한 솔루션 인 수퍼 샘플링을 의미했지만 내 요구 사항에는 너무 느립니다. –

2

밉 매핑을 사용할 수없는 경우 앨리어싱을 피하려고합니다. 밉 매핑이없는 플랫폼은 일반적으로 문제가되지 않습니다.

그러나 앨리어싱을 정말로 피하고 싶다면 프리 - 파티 밉 매핑별로 프래그먼트마다 밉 매핑을 근사 할 수 있습니다. 먼저 모든 밉맵 레벨을 생성하고 별도의 텍스처로 업로드해야합니다. 삼각형을 렌더링하기 전에 CPU에서 해당 밉맵 레벨을 계산하고이 밉맵 레벨에 해당하는 텍스처를 사용하십시오. 대형 프리미티브의 아티팩트를 피하려면 세분화하십시오.

+0

팁 주셔서 감사합니다. 최후의 수단이있는 것처럼 들립니다. :] –

2

OpenGL을 사용하려면 코어의 일부인 모든 텍스처 포맷이 밉 매핑을 지원해야합니다. 따라서 텍스처 형식이 밉 매핑을 지원하는지 여부를 묻는 구체적인 방법은 없습니다.

일부 확장 기능은 처음 도입되었을 때 새로운 형식 (특히 두 가지 텍스처가 아닌 비구면 텍스처)에서 이러한 제약 조건을 완화했습니다. 확장 자체는 밉 매핑이 전혀 지원되지 않는다는 것을 분명히했습니다. 그러나 핵심에 통합되기 전에 밉 매핑 지원 요구 사항이 복원되었습니다.

+0

감사합니다, 감사합니다. 나는 그것이 그 것으로 내려 오지 않기를 바랐다. 오 잘. –

0

구현이 실제로 밉맵을 지원하지 않으면 매우 놀랄 것입니다. 아마도 하나 이상의 레벨이 누락되었을 가능성이 높습니다. 이는 실수로 쉽게 발생할 수 있습니다.

하나의 밉 레벨을 놓치고 밉 매핑을 사용하면 자신이 가지고있는 것만 얻게됩니다. 모두 레벨이 1x1로 정의되었는지 확인하거나 그에 따라 GL_TEXTURE_MAX_LEVEL TexParameter를 설정하십시오.

관련 문제