nakłada tekstury na wszystko a chce na kulę opengl

0

Witam
Próbuje sie nauczyć opengl, chce zrobić poruszającą się kulkę po jakimś podłożu.
Jednak wczytujac i nakladając teksture nakłada mi sie ona na kulkę oraz na wszystkie elementy które wyswietlam
Prosze o pomoc - wytlumacznie - wskazówki
Troche zakomentowanych linii bo próbuje znaleźć jakieś rozwiazanie ...

 Luint LoadTextureRAW(const char * filename)
{

	GLuint obraz;
	int width, height;
	unsigned char * data;
	FILE * file;

	file = fopen(filename, "rb");
	if (file == NULL) return 0;

	width = 1024;
	height = 512;

	data = (unsigned char *)malloc(width * height * 3);

	fread(data, width * height * 3, 1, file);
	fclose(file);

	for (int i = 0; i < width * height; ++i)
	{
		int index = i * 3;
		unsigned char B, R;
		B = data[index];
		R = data[index + 2];
		data[index] = R;
		data[index + 2] = B;

	}
	
	glGenTextures(1, &obraz);
	glBindTexture(GL_TEXTURE_2D, obraz);
	glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
	glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
	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);   // GL_REPEAT zamiast GL_SPHERE_MAP 
	/*
	glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
	glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
	glEnable(GL_TEXTURE_GEN_S);
	glEnable(GL_TEXTURE_GEN_T);
	*/
	gluBuild2DMipmaps(GL_TEXTURE_2D, 3, width, height, GL_RGB, GL_UNSIGNED_BYTE, data);
	free(data);
	
	return obraz;
}



void DisplaySphere(GLuint texture)
{

	//glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

	//glPushMatrix();

	GLUquadricObj *quad;
	quad = gluNewQuadric();  
	
	//glRotatef(180, 1.0f, 0.0f, 0.0f);

	//glRotatef(180, 1, 0, 0);
		gluQuadricNormals(quad, GLU_SMOOTH);
		gluQuadricTexture(quad, GL_TRUE);
		
		glBindTexture(GL_TEXTURE_2D, nejm);
		gluSphere(quad, 0.3f, 36, 36);
		gluDeleteQuadric(quad);
	
	//glPopMatrix();
}


void displaySphere(void) {
	//glutSwapBuffers();
	
	glClearDepth(1);
	glClearColor(0.0, 0.0, 0.0, 1.0);
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	
	glLoadIdentity();
	glRotatef(90, 1, 0, 0);
	
	DisplaySphere(nejm);

	glutSwapBuffers();
	
}
0

a, i w swojej funkcji init() ; mam

texture = LoadTextureRAW("aaaa.bmp");
oraz
glEnable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);

i pare innych ale raczej nie powinny meic znaczenia dla teksturowania

0

Przed każdym narysowaniem oteksturowanego obiektu musisz wywołać funkcję glBindTexture z identyfikatorem tekstury, którą chcesz nałożyć. Jeśli nie chcesz nakładać żadnej tekstury na inne obiekty, to musisz wywołać glBindTexture(GL_TEXTURE_2D, 0); albo glDisable(GL_TEXTURE_2D) przed ich rysowaniem. W przypadku glDisable nie zapomnij ponownie włączyć glEnable(GL_TEXTURE_2D).

0

Ok :) dzięki za pomoc :>
co prawda jeszcze sam się pomęczyłem i pogooglowałem i znalazłem właśnie ten sposób ale i tak dzięki za pomoc i odpowiedz.
pzdr

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