2011-01-11 4 views
0

이미지를 단일 다각형으로 텍스처 매핑하려고합니다. 내 이미지를 올바르게 읽었지만 이미지의 빨간색 평면 만 텍스처링됩니다.OpenGL 텍스처링은 텍스처의 빨간색 구성 요소 만 표시합니다.

나는 그것을 읽은 후 나는 이미지를 확인하셨습니까 QGLWidget

내에서이 일을하고, 그것은 구성 요소가 제대로 읽을되고있다이다 - 즉, 나는 녹색 및 청색면에 대한 유효한 값을 얻을. 여기

QImageReader *theReader = new QImageReader(); 

theReader->setFileName(imageFileName); 
QImage theImageRead = theReader->read(); 
if(theImageRead.isNull()) 
    { 
     validTile = NOT_VALID_IMAGE_FILE; 
     return; 
    } 
else 
    { 
     int newW = 1; 
     int newH = 1; 
     while(newW < theImageRead.width()) 
      { 
       newW *= 2; 
      } 
     while(newH < theImageRead.height()) 
      { 
       newH *= 2; 
      } 
     theImageRead = theImageRead.scaled(newW, newH, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); 
// values checked in theImageRead are OK here 
     glGenTextures(1,&textureObject); 
     theTextureImage = QGLWidget::convertToGLFormat(theImageRead); 
// values checked in theTextureImage are OK here 
     glBindTexture(GL_TEXTURE_2D, textureObject); 
     glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,newW, newH, 0, GL_RGBA, GL_UNSIGNED_BYTE,theTextureImage.bits()); 
     glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
     glFlush(); 
     validTile = VALID_TEXTURE; 
     return; 
    } 

then I draw like this:

{ glEnable(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D,textureTiles[tN]->getTextureObject()); glBegin(GL_QUADS); glTexCoord2f(0.0,0.0); glVertex2f(textureTiles[tN]->lowerLeft.x(), textureTiles[tN]->lowerLeft.y()); glTexCoord2f(1.0,0.0); glVertex2f(textureTiles[tN]->lowerRight.x(), textureTiles[tN]->lowerRight.y()); glTexCoord2f(1.0,1.0); glVertex2f(textureTiles[tN]->upperRight.x(), textureTiles[tN]->upperRight.y()); glTexCoord2f(0.0,1.0); glVertex2f(textureTiles[tN]->upperLeft.x(), textureTiles[tN]->upperLeft.y()); glEnd(); glDisable(GL_TEXTURE_2D); } 

아무도 그것의 값을 것처럼 내 텍스처 interpreded하는 원인이 아무것도 볼 수행하는 코드를입니다 (R, 0,0,1)? (r, g, b, a)?

는 QT 4.7.1, 우분투 10.04는 OpenGL을 2.something 또는 도움

+1

잊어 버린 곳에서 'glColor()'콜을 사용하고 있습니까? – genpfault

+0

내부적으로 OpenGL은 internalFormat 매개 변수를 사용하고 필요한 모든 계산을 데이터에 적용하여 요청 된 형식으로 가져옵니다. 이 결과 (내가 올바르게 문서를 이해하는 경우) GL은 항상 RGBA 이미지입니다. 테스트 목적으로 함수 호출에서 GL_RGB 대신 GL_RGBA로 명시 적으로 internalFormat을 설정하면 어떻게됩니까? – badgerr

+0

아무 것도 - 전혀 차이 없음 – jhowland

답변

2

이 사전에 다른

덕분에 매우 일반적인 문제입니다. 먼저, 기본값이 밉맵을 사용하고 있기 때문에 MIN/MAG 필터를 무언가로 설정하십시오. 밉맵을 제공하지 않았기 때문에 텍스처가 불완전합니다.

불완전한 질감을 샘플링하면 일반적으로 흰색이됩니다. 기본 텍스처 환경을 사용하는 glColor 호출은 정점 색상과 텍스처 색상을 곱합니다. 당신은 아마도 glColor (빨강), 빨강 * 흰색 = 빨강과 같은 것을 가질 수 있습니다. 그래서 당신은 빨강을 보았습니다.

해결하려면 MIN/MAG 필터를 GL_LINEAR 또는 GL_NEAREST로 설정하십시오.

+1

나는 그것을했다 - 차이가 없다. 또한 내가 한 것은 glTexEnvi (GL_TEX_ENV, GL_TEX_ENV_MODE, GL_REPLACE)를 사용하여 모든 차이를 만들었다는 것입니다. – jhowland

7

비슷한 문제가 있습니다. 나는 텍스쳐 화 된 쿼드를 그리기 전에 gl 색을 흰색과 불투명하게 "재설정"해야만한다는 것을 알았습니다. 그렇지 않으면 색이 엉망이되었습니다. 좋아요 :

... 
glEnable(GL_TEXTURE_2D); 
glBindTexture(GL_TEXTURE_2D,textureTiles[tN]->getTextureObject()); 

glColor4f(1.0, 1.0, 1.0, 1.0); // reset gl color 

glBegin(GL_QUADS); 
... 
+0

아직 시도해 보셨습니까? 나는 그것이 중요하지 않은 것처럼 보인다는 것을 안다. 그러나 그것은 확실히한다. (나를 위해 어쨌든 ;-) – sidewinderguy

+0

이것은 나를 위해 일했다. 어떤 설명서 나 색상을 다시 설정해야한다는 내용을 찾지 못했기 때문에 약간의 스케치처럼 보입니다. – pR0Ps

관련 문제