2

地形 (高さマップから作成) を草のテクスチャでカバーしようとしていますが、正常に機能していません。単純な GL_QUAD でテクスチャを取得することさえできません。結果はマルチカラー ネットです。

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

1 に答える 1

4

ドキュメントから:

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

画像 img を、glTexImage2D() などの OpenGL 関数で期待される名前のない形式に変換します。返された画像は QImage として使用できませんが、QImage::width()、QImage::height()、および QImage::bits() は OpenGL で使用できます。使用される GL 形式はGL_RGBA [強調鉱山] です。

の代わりにglTexImage2D使用する呼び出しで。GL_RGBAGL_RGB

于 2013-04-18T07:37:02.950 に答える