Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
纹理openGl。C++_C++_Qt_Opengl - Fatal编程技术网

纹理openGl。C++

纹理openGl。C++,c++,qt,opengl,C++,Qt,Opengl,我试图用草纹理覆盖我的地形,它是由heightmap制成的,但它不能正常工作。我甚至不能在一个简单的GL_四边形上获得纹理,结果是多色网 void GLWidget::initializeGL() { // glEnable(GL_TEXTURE_2D); // } 在QGLwidget中,我调用 openTextureImg(); OpenTextureIM的代码: bool GLWidget::openTextureImg() { QString fileName = QFil

我试图用草纹理覆盖我的地形,它是由heightmap制成的,但它不能正常工作。我甚至不能在一个简单的GL_四边形上获得纹理,结果是多色网

void GLWidget::initializeGL()
{
//
    glEnable(GL_TEXTURE_2D);
//
}
在QGLwidget中,我调用

openTextureImg();
OpenTextureIM的代码:

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;


}
我做错了什么。

来自文档:

QImage QGLWidget::convertToGLFormat常量QImage和img[静态]

将图像img转换为OpenGL函数(如glTexImage2D)所需的未命名格式。返回的图像不能用作QImage,但是QImage::width、QImage::height和QImage::bits可以与OpenGL一起使用。使用的GL格式为GL_RGBA[强调矿山]

在调用glTexImage2D时,请使用GL_RGBA而不是GL_RGB。

来自文档:

QImage QGLWidget::convertToGLFormat常量QImage和img[静态]

将图像img转换为OpenGL函数(如glTexImage2D)所需的未命名格式。返回的图像不能用作QImage,但是QImage::width、QImage::height和QImage::bits可以与OpenGL一起使用。使用的GL格式为GL_RGBA[强调矿山]


在调用glTexImage2D时,请使用GL_RGBA而不是GL_RGB。

非常非常感谢。非常非常感谢。
   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();

}