2015-01-06 4 views
0

OpenGL의 최신 버전을 사용하고 있습니다. 그러나 나는 다음과 같은 기능을 C++로 작성하여 텍스처를 만들 때 :텍스처가 불투명 한 OpenGL 렌더링

GLuint Texture::Generate2dTexture(int width, int height, char* data, int length) 
{ 
    GLuint textureIndex; 

    glGenTextures(1, &textureIndex); 
    glBindTexture(GL_TEXTURE_2D, textureIndex); 
    gluBuild2DMipmaps(GL_TEXTURE_2D, 3, width, height, GL_BGR_EXT, 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); 
    return textureIndex; 
} 

및 사용 렌더링 :

void Renderer::DrawRectangle(GLuint textureID, RECTD rect) 
{ 
    glBindTexture(GL_TEXTURE_2D, textureID); 
    glBegin(GL_QUADS); 
    { 
     glTexCoord2f(0.0f, 1.0f); 
     glVertex2d(rect.left, rect.top); 
     glTexCoord2f(0.0f, 0.0f); 
     glVertex2d(rect.left, rect.bottom); 
     glTexCoord2f(1.0f, 0.0f); 
     glVertex2d(rect.right, rect.bottom); 
     glTexCoord2f(1.0f, 1.0f); 
     glVertex2d(rect.right, rect.top); 
    } 
    glEnd(); 
} 

그들은 렌더링 후 불분명 나타납니다. 그것은 M $에 의해 만들어진 이미지 뷰어의 외관과는 상당히 다른 것처럼 보입니다.

그 원인과 위험을 피하는 방법은 무엇입니까?

+2

최신 버전이며 여전히 직접 렌더링을 사용하고 있습니까? –

+0

나는 "불분명하다"라는 말은 "흐릿한"것을 의미한다고 생각합니다. 이 경우, OpenGL에 의한 쌍 선형 보간법 때문입니다. 보간을 원하지 않으면 GL_LINEAR 대신 GL_NEAREST를 사용하십시오. 그러나 픽셀로 텍셀을 정렬하지 않으면 텍스쳐가 매우보기 흉하게 보일 것입니다. – Tibo

+0

@ratchetfreak idk, 방금 그런 코드로 사용했습니다 – PENGUINLIONG

답변

1

이미지의 크기를 확인하십시오. 대부분의 이미지 로더는 이미지가 2의 거듭 제곱으로 표시 될 것으로 예상합니다. 따라서 8x8 픽셀 이미지가 뚜렷하게 표시되어야합니다 (펼쳐지거나 왜곡 된 것과 반대). 32x32 또는 128x128 등으로 이미지를 잘라내어 도움이되는지 확인하십시오. 원하는 이미지를 높이 = 너비로 표현할 수없는 경우 캔버스를 128x128 크기로 조정 한 다음 UV 좌표를 사용하여 텍스처에 대해 원하는 이미지 부분을 가져옵니다.

또한 이중선 필터링을 사용하지 않으면 모든 흐리게 처리해야합니다 생각 : glTexParameterf (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);

이것은 명확한 답변이 아닙니다. 주석을 달 수있는 대리인이 충분하지 않습니다.

+0

사실, GL 3.x 및 GL 4가 많습니다. x 카드는 NPOT2 이미지에 많은 문제가 있습니다. 특히 비추천 API를 사용하는 드라이버에 대한 버그를 수정하지는 않기 때문에 폐기 된 파이프 라인을 사용할 때 더욱 그렇습니다 – GameDeveloper

관련 문제