2014-03-19 1 views
1

앨리어싱 제거 문제가 있습니다. 제 목표는 평행 육면체라고 할 수있는 "전단 된 직사각형"에 텍스처를 렌더링하는 것입니다. 아래 코드를 사용하면 세로선이 픽셀 화됩니다. glShadeModel, glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR)를 변경해 보았습니다. GL_LINEAR, GL_NEAREST_MIPMAP_LINEAR 등 "InitializeGL"시퀀스에서 "glEnable (GL_POLYGON_SMOOTH);"을 추가하려고 시도했습니다. 하지만 텍스처가 아니라 다각형을위한 것 같아요. 나는 밉 매핑 (mip-mapping)이나 클로즈업 (close-up) 필터 사용에 대한 기사를 찾았지만 OpenGL에서 코드를 작성하는 방법을 이해하지 못했습니다. 앨리어싱없이 평행 육면체에 텍스처를 렌더링하는 가장 좋은 방법은 무엇입니까?앤티 앨리어싱을 사용하여 평행 육면체의 텍스처 렌더링 (셰어 링이있는 직사각형)

glEnable(GL_TEXTURE_2D); 
glBindTexture(GL_TEXTURE_2D, textureId); 
glBegin(GL_QUADS); 
glColor4ub(255,255,255,incrustInfo->atexte); 
glTexCoord2d(0.0, 0.0); glVertex2d(x0, y0); 
glTexCoord2d(1.0, 0.0); glVertex2d(x1, y0); 
glTexCoord2d(1.0,1.0); glVertex2d(x1 + yTanAngle, y1); 
glTexCoord2d(0.0,1.0); glVertex2d(x0 + yTanAngle, y1); 
glEnd(); 
glDisable(GL_TEXTURE_2D); 

나는 또한 전단 매트릭스 적용하려고 :

//--- Shearing 
GLdouble shearing[16] = {1.0,0.0,0.0,0.0, tan(angle*M_PI/180.0),1.0,0.0,0.0, 0.0,0.0,1.0,0.0, 0.0,0.0,0.0,1.0}; 
glMultMatrixd(shearing); 

을하지만 여전히 pixellised 이미지가 여기 아래에, 당신은 내가 전단 효과를 얻을했다 "yTanAngle"를 볼 수 있습니다 . 그리고 또 다른 문제는이 전단을이 gl_quad에만 적용하고 전역 행렬에는 적용하지 말아야한다는 것입니다. 모든 요소는 전단됩니다.

Nils Pipenbrinck의 질문에 따르면 여기 스크린 샷이 있습니다 (그러나 .BMP로 저장되고 .png 링크를 제공하는 freeimagehosting에로드 된 Windows 스크린 샷에서 완료되었지만 플래그의 픽셀 화를 볼 수 있음). sheared flag needs antialiasing http://s0.uploads.im/QWx3i.png

+0

'glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)를 시도하십시오. 텍스처를 생성하는 동안 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 어쩌면 그것이 네가 원하는거야. – lisyarus

+0

screenshot을 게시하십시오 –

+0

나는 "GL_LINEAR"를 확대하여 시도했지만 성공하지 못하면 필터를 축소했습니다. 여전히 픽셀 화되었습니다. – Arnaud

답변

0

텍스처를 만드는 동안 밉맵을 사용하면 마침내 트릭을 만들었습니다.

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); 

을하고 glTexImage2D 후에, 나는 추가 :

는 glTexImage2D 전에, 나는 추가

glGenerateMipmap(GL_TEXTURE_2D); 

그리고 CPU 소비가 내 200x300의 이미지 변경되지 않습니다.

0

이제 이것은 흥미로운 문제입니다. 그림에서 나는 이것이 장치 공간에 정확히 맞다고 가정합니다. 필터링을하면이 문제가 해결 될 것이라고 생각하지만 그렇지 않습니다.

왜 그런지 이해하려면 필터링 작동 방식을 살펴 봐야합니다. 텍셀이 픽셀에 맞지 않으면 그래픽 카드는 무엇을해야합니까? GL_NEAREST를 사용하면 가장 잘 일치하는 텍셀을 선택하여 사용합니다. GL_LINEAR을 사용하면 픽셀로 떨어지는 텍셀의 평균 가중치가 사용됩니다.

텍셀과 픽셀이 완벽하게 일치하면 어떻게됩니까? GL_NEAREST를 사용하면 픽셀이 예상대로 선택됩니다. GL_LINEAR 모든 픽셀을 사용하면 정확히 하나가 걸리고 가중치가 적용됩니다. 이 경우에서 볼 수 있듯이 텍스처는 완벽하게 복제됩니다.

어떤 옵션이 있습니까?

당신이 할 수있는 가장 깨끗한 것은 알파 블렌딩을 사용하여 그래픽 편집기에서 플래그를 기울이고 일반 직사각형을 그리는 것입니다.

약간의 해법은 왼쪽 또는 오른쪽으로 장치 좌표 0.5만큼 직사각형을 이동하는 것입니다. 이렇게하면 완벽한 오버랩이 변경되고 GL_LINEAR 필터링이 적용됩니다. 여담으로


이 당신의 GUI이며, (3D 장면에 사용 된 같은)이 조정되지 않을 경우, 당신은 밉맵을 사용하지 않아야합니다, 당신은 메모리 공간을 낭비하고있다.

관련 문제