c++ - 如何防止在 OpenGL Qt 中绑定(bind)随机纹理?

标签 c++ qt opengl

我将纹理 ID 存储在 GLuint textures[] 数组中。当我尝试绑定(bind)其中的第一个 (textres[0]) 时,我得到了随机的一个。有时很好,但大多数情况下不是。每个其他的都工作得很好。我还尝试在其他绘图方法中绑定(bind)此纹理,它的行为方式相同。我的加载函数:

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();

}

最佳答案

代替

&textures[Images.size()] 

实际上传递的是您应该使用的数组之外的第一个 uint 的地址

glGenTextures(Images.size(), textures);

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

关于c++ - 如何防止在 OpenGL Qt 中绑定(bind)随机纹理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25717197/

相关文章:

qt - 我如何将 fontconfig 更新到 Red Hat 5.3 中的更新版本?

c++ - 如何配置 Qt Creator 以在 Windows 中使用 Boost

python - 带索引的 pyOpenGL VBO

c++ - 单击窗口 x 轴的末端时,鼠标单击会导致 OpenGL 中的光线创建不正确吗?

c++ - 初始化自定义类的 vector ?

c++ - 将 std::uninitialized_fill() 与任何分配器一起使用是否有意义?

c++ - 在 Visual Studio 2010 中基于文件添加包含路径

c++ - 在 aux 方法中创建的 QWidget 不显示/绘制

c++ - glxCreateContextAttribsARB 和 Linux 上 OpenGL 函数的动态加载

c++ - 一些 C++ 语法的问题