2014-11-06 5 views
0

OpenGL에서 텍스처를 사용하고 있습니다 (FLTK에서는 C++). mipmaps를 사용하고 있습니다. 다중 플랫폼 프로젝트 (현재 Mac에서 코딩 중)를 만들고 있지만 glGenerateMipmap을 사용하지 않고 Windows에서 확장을 사용하지 않으므로 수동으로 수행하기로 결정했습니다. 이 예제에서는 '바닥'과 '천장'에 대해 수행합니다. 나는 질감을 사용하면 내가 OpenGL에서 밉맵 색상 인공물

glEnable(GL_TEXTURE_2D); 
glBindTexture(GL_TEXTURE_2D,ceiling_texture); 
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT) 

     //draw primitives with texture coordinates 

glDisable(GL_TEXTURE_2D); 

내가 '바닥'에 대한 동일한 코드와 절차를 사용하여 사용하는 서로 다른 해상도 이미지 버전
glGenTextures(1, &ceiling_texture); 
glBindTexture(GL_TEXTURE_2D, ceiling_texture); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 0); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 8); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, ceiling_width0, ceiling_height0, 0, GL_RGB, GL_FLOAT, ceiling_pixels0); 
glTexImage2D(GL_TEXTURE_2D, 1, GL_RGB, ceiling_width1, ceiling_height1, 0, GL_RGB, GL_FLOAT, ceiling_pixels1); 
glTexImage2D(GL_TEXTURE_2D, 2, GL_RGB, ceiling_width2, ceiling_height2, 0, GL_RGB, GL_FLOAT, ceiling_pixels2); 
glTexImage2D(GL_TEXTURE_2D, 3, GL_RGB, ceiling_width3, ceiling_height3, 0, GL_RGB, GL_FLOAT, ceiling_pixels3); 
glTexImage2D(GL_TEXTURE_2D, 4, GL_RGB, ceiling_width4, ceiling_height4, 0, GL_RGB, GL_FLOAT, ceiling_pixels4); 
glTexImage2D(GL_TEXTURE_2D, 5, GL_RGB, ceiling_width5, ceiling_height5, 0, GL_RGB, GL_FLOAT, ceiling_pixels5); 
glTexImage2D(GL_TEXTURE_2D, 6, GL_RGB, ceiling_width6, ceiling_height6, 0, GL_RGB, GL_FLOAT, ceiling_pixels6); 
glTexImage2D(GL_TEXTURE_2D, 7, GL_RGB, ceiling_width7, ceiling_height7, 0, GL_RGB, GL_FLOAT, ceiling_pixels7); 
glTexImage2D(GL_TEXTURE_2D, 8, GL_RGB, ceiling_width8, ceiling_height8, 0, GL_RGB, GL_FLOAT, ceiling_pixels8); 

에서 데이터를로드하려면 다음 코드를 사용합니다.

그러나 천장의 경우 저해상도 밉맵을 사용하는 거리에서 이상한 색 인공물 (노란색 색조)이 나타납니다. I는 I 단지 GIMP에서 이미지를 스케일링함으로써 생성되는 다른 해상도에서 같은 파일의 다른 버전에 적용 glGetTexImage를 사용하여 화소 정보를 생성

Yellow artefact in ceiling

(그림 참조). 다시 나는 바닥과 천장 모두 똑같이했다.

glGenerateMipmap을 사용했을 때 이런 일이 발생하지 않았습니다.

왜 내가이 인공물을 얻고 있으며 어떻게해야합니까?

답변

1

Urgh. 그런 실망스러운 이유. 내가 김프에서 이미지를 축소 할 때 가장 이상한 이미지 (2x2)의 가장 코너 픽셀에 대해 파란색 구성 요소를 완전히 잘못 (과소 평가)하기로 결정한 이상한 평균을 사용하고있었습니다. 수동으로 더 합리적인 가치로 강제하고 지금은 작동합니다.