Witam
Jestem nowy więc nie wiem czy w dobrym dziale to umieściłem, jeśli nie to sory.
Mój problem polega na tym że:
Chcę zrobić funkcję w openGl która narysuje mi model segmentu który ma mieć nałożone 3 tekstury. Wczytuję te tekstury ale kiedy próbuję je nałożyć to niezależnie od wybranej nakłada mi wszędzie ostatnią wczytaną teksturę. To jest mój kod:
GLuint NazwyTekstur[3];
bool LoadBMPTexture(char * FileName) //ładowanie bmp
{
GLvoid * obrazek,* zlyobrazek;
BITMAPINFO * infoBitmapy;
zlyobrazek = LoadDIBitmap(FileName, &infoBitmapy);
if(zlyobrazek == NULL)
{
return false;//nie udalo sie
}
obrazek = ConvertRGB(infoBitmapy, zlyobrazek);
free(zlyobrazek);
if(obrazek == NULL)
{
free(infoBitmapy);
return false;//nie udalo sie
}
gluBuild2DMipmaps(GL_TEXTURE_2D,
GL_RGB, // internalFormat
infoBitmapy->bmiHeader.biWidth,
infoBitmapy->bmiHeader.biHeight,
GL_RGB, // format
GL_UNSIGNED_BYTE, // type
obrazek);
free(obrazek);
free(infoBitmapy);
return true;
}
void initTextures() //przypisanie tekstur
{
glGenTextures(3, NazwyTekstur);
glBindTexture(GL_TEXTURE_2D, NazwyTekstur[0]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
LoadBMPTexture("Danger.bmp");
glBindTexture(GL_TEXTURE_2D, NazwyTekstur[1]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
LoadBMPTexture("slup2.bmp");
glBindTexture(GL_TEXTURE_2D, NazwyTekstur[2]);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
LoadBMPTexture("podloga_slup.bmp");
}
void init(void)
{
glClearColor (0.0, 0.0, 1.0, 0.0);
glEnable(GL_DEPTH_TEST);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
initTextures();
//glEnable(GL_TEXTURE_2D);
}
void PostawSegment(float S, float x, float y, float z) //moj segment
{
float size=S/2;
glPushMatrix();
glTranslatef(x,y,z);
glBegin(GL_QUADS);
glBindTexture(GL_TEXTURE_2D, NazwyTekstur[0]);
//glColor3f(0.5,0.5,0.5);
glTexCoord2f(0.0, 0.0); glVertex3f(-size,0,size);
glTexCoord2f(1.0, 0.0); glVertex3f(size,0,size);
glTexCoord2f(1.0, 1.0); glVertex3f(size,0,-size);
glTexCoord2f(0.0, 1.0); glVertex3f(-size,0,-size);
glEnd();
glBegin(GL_QUADS);
//glColor3f(0,0,0.5);
glBindTexture(GL_TEXTURE_2D, NazwyTekstur[1]);
glTexCoord2f(0.0, 0.0); glVertex3f(-size,-size*0.4,size);
glTexCoord2f(1.0, 0.0); glVertex3f(-size,0,size);
glTexCoord2f(1.0, 4.0); glVertex3f(-size,-0,-size);
glTexCoord2f(0.0, 4.0); glVertex3f(-size,-size*0.4,-size);
glEnd();
//... itd rysowanie kolejnych płaszczyzn
glPopMatrix();
}
Podejrzewam że jest tu jakiś banalny błąd ale czy mógłby ktoś wskazać jak nałożyć konkretną teksturę z tablicy NazwyTekstur[3] ???