我将纹理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();
}
答案 0 :(得分:2)
而不是
&textures[Images.size()]
实际上是传递你应该使用的数组的第一个uint OUTSIDE的地址
glGenTextures(Images.size(), textures);
因为纹理是uint指针,指向数组的第一个元素。