如何在OpenGL Qt中防止绑定随机纹理?

时间:2014-09-08 03:48:51

标签: c++ qt opengl

我将纹理ID存储在GLuint textures[]数组中。当我尝试绑定其中的第一个(textres [0])时,我得到随机的一个。有时很好,但大部分都没有。其他所有工作都很好。我也尝试在其他绘图方法中绑定此纹理,它的行为方式相同。我的加载功能:

int Screen::loadTextures()
{
    Images.clear();

    Images.append(QImage("APPLE.png"));
    Images.append(QImage("V.png"));
    Images.append(QImage("TAIL.png"));
    Images.append(QImage("DTOR.png"));
    Images.append(QImage("HEAD.png"));
    Images.append(QImage("BACK.png"));
    Images.append((QImage("PLUS10.png")));
    Images.append((QImage("SPEEDUP.png")));

    for(int i = 0; i<Images.size(); ++i)
    {
        Images[i] = QGLWidget::convertToGLFormat(Images[i]);
        if(Images[i].isNull()) return 0;
    }

    textures = new GLuint[Images.size()];
    glGenTextures(Images.size(), &textures[Images.size()]);

    for(int i=0; i<Images.size(); ++i)
    {
        glBindTexture(GL_TEXTURE_2D,textures[i]);
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
        glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, Images[i].width(), Images[i].height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, Images[i].bits());
    }

    return 1;
}

和绘画:

void Screen::drawApple(int X, int Y)
{
    #define JEDNOSTKA = 0.2
    glPushMatrix();

    glBindTexture(GL_TEXTURE_2D,textures[0]);

    glTranslated(X*JEDNOSTKA, Y*JEDNOSTKA,0);
    glBegin(GL_POLYGON);

    glTexCoord2f(0,1);
    glVertex3d(-JEDNOSTKA/2, JEDNOSTKA/2,0);
    glTexCoord2f(1,1);
    glVertex3d( JEDNOSTKA/2, JEDNOSTKA/2,0);
    glTexCoord2f(1,0);
    glVertex3d( JEDNOSTKA/2,-JEDNOSTKA/2,0);
    glTexCoord2f(0,0);
    glVertex3d(-JEDNOSTKA/2,-JEDNOSTKA/2,0);

    glEnd();
    glPopMatrix();

}

1 个答案:

答案 0 :(得分:2)

而不是

&textures[Images.size()] 

实际上是传递你应该使用的数组的第一个uint OUTSIDE的地址

glGenTextures(Images.size(), textures);

因为纹理是uint指针,指向数组的第一个元素。