我想將紋理映射到單個多邊形。我的圖像正在被正確讀取,但只有圖像的紅色平面被紋理化。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,Ubuntu的10.04,OpenGL的2.something或其他
在此先感謝您的幫助
你有一個'glColor()`調用你忘了嗎? – genpfault 2011-01-11 16:13:34
在內部,OpenGL採用internalFormat參數並將所需的任何計算應用於您的數據以獲得所需的格式。這個結果(如果我正確理解文檔)始終是一個RGBA圖像,就GL而言。出於測試目的,如果在函數調用中明確將internal格式設置爲GL_RGBA而不是GL_RGB,會發生什麼情況? – badgerr 2011-01-11 16:50:09
沒有什麼 - 完全沒有區別 – jhowland 2011-01-11 18:11:25