2013-04-17 151 views
2

我試圖用草紋理來覆蓋我的地形(它由高度貼圖製成),但它不能正常工作。我甚至無法在簡單的GL_QUAD上獲得紋理,結果是多色網。紋理openGl。 qt

void GLWidget::initializeGL() 
{ 
// 
    glEnable(GL_TEXTURE_2D); 
// 
} 

在QGLWidget來繪圖我叫openTextureImg()的

openTextureImg(); 

代碼:

bool GLWidget::openTextureImg() 
{ 

QString fileName = QFileDialog::getOpenFileName(this,tr("Open Image"),QDir::homePath(), tr("Image Files (*.png *.tga *.bmp)")); 
QImage textureImg; 

if (!fileName.isEmpty()) 
{ 


    textureImg = QImage(fileName, "PNG"); 
    qDebug()<<"image loaded"; 

    textureImg = QGLWidget::convertToGLFormat(textureImg); 
    glGenTextures(1, &texHandle); 
    glBindTexture(GL_TEXTURE_2D, texHandle); 

    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, textureImg.width(), textureImg.height(), 0, GL_RGB, 
       GL_UNSIGNED_BYTE, textureImg.bits()); 
    //glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); 
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); 
    glBindTexture(GL_TEXTURE_2D, 0); 

    return true; 
} 
return false; 


} 

在這裏,我想畫一個四:

void GLWidget::drawRect() 
{ 
    glColor3f(0.5,0.5,1.0); 
    glBindTexture(GL_TEXTURE_2D,texHandle); 
glBegin(GL_QUADS); 
    glTexCoord2d(0.0,0.0); glVertex2d(0.0,0.0); 
    glTexCoord2d(1.0,0.0); glVertex2d(1000.0,0.0); 
    glTexCoord2d(1.0,1.0); glVertex2d(1000.0,1000.0); 
    glTexCoord2d(0.0,1.0); glVertex2d(0.0,1000.0); 



    glEnd(); 

} 

上午什麼我做錯了。

回答

4

從文檔:

QImage QGLWidget::convertToGLFormat (const QImage & img) [static]

圖像IMG到匿名的格式由OpenGL函數預期如glTexImage2D轉換()。返回的圖像不能用作QImage,但QImage :: width(),QImage :: height()和QImage :: bits()可以用於OpenGL。使用的GL格式是GL_RGBA [強調我的]。

在您的來電glTexImage2D使用GL_RGBA,而不是GL_RGB

+0

非常非常非常感謝。 –