У меня мипмэппинг работает нормально. Но по какой-то причине после того, как я наложил текстуру, все остальные объекты в моем приложении приобретают цвет, который кажется средним цветом текстуры. Даже HUD. Есть ли что-то, что мне нужно учитывать? Вот код:
GLuint LoadTexture( const char * filename, int width, int height )
{
GLuint texture;
unsigned char * data;
FILE * file;
file = fopen( filename, "rb" );
if ( file == NULL ) return 0;
data = (unsigned char *)malloc( width * height * 3 );
fread( data, width * height * 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_MIPMAP_LINEAR );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );
gluBuild2DMipmaps( GL_TEXTURE_2D, 3, width, height, GL_RGB, GL_UNSIGNED_BYTE, data );
free( data );
return texture;
}
Это вызывается перед циклом и освобождается после слов. Эта следующая часть кода происходит внутри моего цикла while. Он вызывается перед всеми остальными объектами сцены.
void makeGround() {
glBindTexture( GL_TEXTURE_2D, texture );
GLfloat mat_specular[] = { 0.5, 0.5, 0.5, 1.0 };
GLfloat mat_diffuse[] = { 0.8, 0.8, 0.8, 1.0 };
GLfloat mat_shininess[] = { 100.0 };
glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);
glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);
//glColor3f(1.0, 1.0, 1.0);
glPushMatrix();
glTranslatef(-(size/2), 0.0f, -(size/2));
glCallList(LIST1);
glPopMatrix();
}
Что я должен делать между рисованием разных элементов, чтобы этого не произошло?
LINEAR_MIPMAP_LINEAR
сTEXTURE_MAG_FILTER
. В любом случае это не имеет смысла;TEXTURE_MAG_FILTER
означает увеличение: сделать текстуру больше, чем базовый слой (самый большой слой в цепочке mipmap). Вы не можете использовать мип-карты, которые больше базового слоя, поэтому вы не можете фильтровать мип-карты с помощьюTEXTURE_MAG_FILTER
. Возможно, это не ваша проблема, но вы все равно должны это знать. - person Nicol Bolas   schedule 02.12.2011