[OpenGL] Multitexturing... :/

0

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

0

No dobra... jeśli kogoś to zaintresuje to mam już odpowiedź na w/w pytanie :p
SauRooN:

po prostu jak chcesz pojedynczą texturę gdzieś użyć to dajesz ją na pierwszy kanał multitexturingu, a drugi wyłączasz.

Cały wątek:
http://warsztat.mmogspot.pl/forum/viewtopic.php?p=65788#65788
Pozdrawiam

0

dla jasności jeszcze dorzucę kod SauRoona:

glActiveTextureARB(GL_TEXTURE0_ARB);   // włącza pierwszy kanał
glEnable(GL_TEXTURE_2D); 

glActiveTextureARB(GL_TEXTURE1_ARB);        // wyłącza drugi kanał
glDisable(GL_TEXTURE_2D); 

DrawSky(); 

1 użytkowników online, w tym zalogowanych: 0, gości: 1