Witam!
Mam takie oto sobie fragmenty kodu: [książka "OpenGL: Programowanie gier"]
bool LoadAllTextures()
{
// ładuje obraz pierwszej tekstury
smileTex = LoadTextureFile("smile.bmp");
if (smileTex == NULL)
return false;
// ładuje obraz drugiej tekstury
checkerTex = LoadTextureFile("chess.bmp");
if (checkerTex == NULL)
return false;
// tworzy pierwszą teksturę
glBindTexture(GL_TEXTURE_2D, smileTex->texID);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, smileTex->width, smileTex->height, GL_RGB, GL_UNSIGNED_BYTE, smileTex->data);
// tworzy drugą teksturę
glBindTexture(GL_TEXTURE_2D, checkerTex->texID);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); // repeat texture
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGB, checkerTex->width, checkerTex->height, GL_RGB, GL_UNSIGNED_BYTE, checkerTex->data);
// wybiera pierwszą jednostkę tekstury
glActiveTextureARB(GL_TEXTURE0_ARB);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, smileTex->texID);
// wybiera drugą jednostkę tekstury
glActiveTextureARB(GL_TEXTURE1_ARB);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, checkerTex->texID);
return true;
}
...
void Render()
{
radians = float(PI*(angle-90.0f)/180.0f);
// wyznacza położenie kamery
cameraX = lookX + sin(radians)*mouseY;
cameraZ = lookZ + cos(radians)*mouseY;
cameraY = lookY + mouseY / 2.0f;
// wycelowuje kamerę w punkt (0,0,0)
lookX = 0.0f;
lookY = 0.0f;
lookZ = 0.0f;
// opróżnia bufory ekranu i głębi
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
// umieszcza kamerę
gluLookAt(cameraX, cameraY, cameraZ, lookX, lookY, lookZ, 0.0, 1.0, 0.0);
// skaluje sześcian do rozmiarów 15x15x15
glScalef(15.0f, 15.0f, 15.0f);
// rysuje sześcian o środku w początku układu współrzędnych
DrawCube(0.0f, 0.0f, 0.0f);
SwapBuffers(g_HDC); // przełącza bufory
}
Program wykorzystując m.in. w/w dwie funkcje rysuje obecnie prostopadłościan (DrawCube()), pokryty jednocześnie na każdej ścianie dwiema teksturami (smile.bmp oraz chess.bmp).
Chcę utworzyć tło dla tej animacji-w tym celu tworzę duży prostokąt za prostopadłościanem i chcę go pokryć teksturą... np. nieba.
Jak mam to zrobić, aby teksturowanie prostokąta-tła nie miało nic wspólnego z multitexturingiem zaimplementowanym już w tym programie.
Za każdym razem, gdy chcę dodać "zwykłą"...pojedynczą... teksturę to wszystko się chrzani-nie wyświetla się zwykła tekstura tylko pomieszana z tymi z multitexturingu.
Proszę o pomoc... ;-(
Pozdrawiam