есть проблема, которую я не знаю, как решить.
Я знаю, как получить несколько текстур в моей 3D-игре openGL и MVC ++ 2010, но путь очень медленный. Чем больше текстур я загружаю, тем медленнее игра. Прошло 2 недели с тех пор, как я застрял с этим. Я искал много сайтов, но ни один из них не помог мне.
Я не хочу glaux, потому что он продолжает давать мне ошибки и, как говорят, имеет утечки памяти.
Вот как я загружаю .RAW текстуры:
GLuint texture; //ID to bind with
GLuint LoadTexture(const char *filename, int imW, int imH){
unsigned char*data;
FILE*file;
file=fopen(filename,"rb");
if(file==NULL)return 0;
data=(unsigned char*)malloc(imW*imH*3);
fread(data,imW*imH*3,1,file);
fclose(file);
glGenTextures(1,&texture);
glBindTexture(GL_TEXTURE_2D,texture);
glTexEnvf(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_LINEAR);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D,0x8191,1); //0x8191 means GL_GENERATE_MIPMAP
glTexImage2D(GL_TEXTURE_2D,0,3,imW,imH,0,GL_RGB,GL_UNSIGNED_BYTE,data);
free(data);
return texture;
}
У меня есть opengl 2, но я использую "glTexParameterf (GL_TEXTURE_2D, 0x8191,1);" строить мипмапы, потому что "gluBuild2DMipmaps" медленнее этого.
void model_room(float x, float y, float x2, float y2, float z, float z2){
LoadTexture("tex_floor.raw",512,512);
model_floor(x,y,x2,y2,z,7,7);
glDeleteTextures(1,&texture);
LoadTexture("tex_ceiling.raw",512,512);
model_floor(x,y,x2,y2,z2,4,4);
glDeleteTextures(1,&texture);
LoadTexture("tex_wall.raw",512,512);
model_wall(x,y,x,y2,z,z2,1,1);
glDeleteTextures(1,&texture);
LoadTexture("tex_tiles.raw",512,512);
model_wall(x,y2,x2,y2,z,z2,1,1);
glDeleteTextures(1,&texture);
LoadTexture("tex_diamondtiles.raw",512,512);
model_wall(x2,y2,x2,y,z,z2,1,1);
glDeleteTextures(1,&texture);
LoadTexture("tex_castlepoint.raw",512,512);
model_wall(x2,y,x,y,z,z2,5,3);
glDeleteTextures(1,&texture);
}
Здесь код загружает текстуры, а затем удаляет их каждый кадр. Возможно, это не очень хорошая идея, но пока все в порядке. Для "model_wall" и "model_floor" это код:
void model_floor(float x, float y, float x2, float y2, float z, float tc1, float tc2){
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex3f(x, y, z);
glTexCoord2f(tc1, 0); glVertex3f(x, y2, z);
glTexCoord2f(tc1, tc2); glVertex3f(x2, y2, z);
glTexCoord2f(0, tc2); glVertex3f(x2, y, z);
glEnd();
}
void model_wall(float x, float y, float x2, float y2, float z1, float z2, float tch, float tcv){
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex3f(x, y, z2);
glTexCoord2f(tch, 0); glVertex3f(x2, y2, z2);
glTexCoord2f(tch, tcv); glVertex3f(x2, y2, z1);
glTexCoord2f(0, tcv); glVertex3f(x, y, z1);
glEnd();
}
Мне просто нужен хороший способ загрузки текстур без замедления игры, и не важно загружать только сырые файлы, но все, что рекомендуется. Я не программист Win Base, поэтому мне может понадобиться какое-то объяснение этих кодов. Любая помощь будет оценена. Заранее спасибо!