텍스처를로드하고 큐브와 평면에 표시했습니다. 비행기와 정육면체가 교차하는 지점에는 추악한 시각적 인공물이 있습니다. 여기텍스처의 intesection에서 OpenGL이 실패합니다.
문제 보여주는이 사진은 다음과 같습니다
: - : - 동일한 시나리오, 다른 관점
이미지 2
이미지 1을 어떤이있다 다음은 이미지를로드하는 방법입니다.
static const GLenum gl_format[4] = { GL_LUMINANCE, GL_LUMINANCE_ALPHA, GL_BGR, GL_BGRA };
GLuint LoadTGATexture(const char* filename)
{
//image is already loaded in --- unsigned char[] data - int width - int height - int components
unsigned int handle;
glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &max_anisotropy);
glGenTextures(1, &handle);
glBindTexture(GL_TEXTURE_2D, handle);
glTexImage2D(GL_TEXTURE_2D, 0, components, width, height, 0, gl_format[components - 1], GL_UNSIGNED_BYTE, data);
gluBuild2DMipmaps(GL_TEXTURE_2D, components, width, height, gl_format[components - 1], GL_UNSIGNED_BYTE, data);
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_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, max_anisotropy);
glBindTexture(GL_TEXTURE_2D, 0);
delete [] data;
return handle;
}
어떻게 해결할 수 있습니까? 내 실수는 무엇입니까?
그냥 추측 할 만하지만 가까운 거리와 먼 거리의 클리핑면 사이에 ** 거대한 ** 차이가있는 원근감 행렬을 가질 수 있습니까? – antonijn
예, 0.00001과 10000.0 -> 너무 큽니다. - 그러나 비행기가 다른 비행기와 정확히 겹치면 여전히 약간의 줄무늬 (0.01와 먼 100.0 근처)가 있습니다. – bricklore
'멀리'는별로 문제가되지 않습니다. 실제 문제는 '근접'입니다. 근거리 비행기를 0.01로 설정하면 멀리있는 비행기가 아주 가깝더라도 Z 버퍼 범위의 ~ 50 %가 0.01에서 0.02 사이입니다. – JasonD