Komputer Świat Ekspert - Forum: [Opengl/C++] Nakładanie tekstur- spadek fps - Komputer Świat Ekspert - Forum

Skocz do zawartości

Strona 1 z 1

[Opengl/C++] Nakładanie tekstur- spadek fps

#1 Użytkownik nie jest zalogowany   MarcinM 

  • Nowy Uczestnik
  • Grupa: Czytelnicy
  • Postów 1
  • Rejestracja: 18-styczeń 11

Napisano 18 styczeń 2011, 20:21

Witam
(Jestem w początkowej fazie pisania gier w opengl - wykonuje projekt na zaliczenie )
Mam problem- mianowicie po nałożeniu tekstur fps'y spadają mi z 50 , na 8 ...
Stworzyłem model 'miasta' , którego bloki (boxy) tworzę za pomocą tablicy dwuwymiarowej ... Wszystko działa pięknie , ale przy nałożeniu textury mogę ręcznie fps'y liczyć ...
Czy może mi ktoś wytłumaczyć / pokazać gdzie jest problem ?
Funkcje odpowiadające za tworzenie box'a //drawBox i odpowiadająca za wczytanie tekstury otrzymałem od prowadzącego zajęcia ,więc sądzę ,że są poprawne ..pewnie ja gdzieś napaskudziłem próbując coś z nimi zrobić :/
Gdyby ktoś z Was wpadł na pomysł rozwiązania problemu ... prosił bym o wiadomość na gg (jeśli to możliwe) GG 2653087


Fragmenty kodu:
funkcja tworząca box'y :
static void drawBox( void ) {

		glBegin(GL_QUADS);
		glNormal3f( 0, 0, -1.0f );
		glTexCoord2f( 1.0f, 1.0f );
		glVertex3f( -0.5f, +0.5f,  -0.5f ); 
		glTexCoord2f( 0.0f, 1.0f );
		glVertex3f( +0.5f, +0.5f,  -0.5f );
		glTexCoord2f( 0.0f, 0.0f );
		glVertex3f( +0.5f, -0.5f,  -0.5f );
		glTexCoord2f( 1.0f, 0.0f );
		glVertex3f( -0.5f, -0.5f,  -0.5f );
		glEnd();
		glBegin(GL_QUADS);
		glNormal3f( 0, 0, 1.0f );
		glTexCoord2f( 1.0f, 1.0f );
		glVertex3f( -0.5f, +0.5f,  0.5f ); 
		glTexCoord2f( 0.0f, 1.0f );
		glVertex3f( +0.5f, +0.5f,  0.5f );
		glTexCoord2f( 0.0f, 0.0f );
		glVertex3f( +0.5f, -0.5f,  0.5f );
		glTexCoord2f( 1.0f, 0.0f );
		glVertex3f( -0.5f, -0.5f,  0.5f );
		glEnd();

		glBegin(GL_QUADS);
		glNormal3f( 1.0f, 0.0f, 0.0f );
		glTexCoord2f( 1.0f, 1.0f );
		glVertex3f( +0.5f, +0.5f,  -0.5f ); 
		glTexCoord2f( 0.0f, 1.0f );
		glVertex3f( +0.5f, +0.5f,  0.5f );
		glTexCoord2f( 0.0f, 0.0f );
		glVertex3f( +0.5f, -0.5f,  0.5f );
		glTexCoord2f( 1.0f, 0.0f );
		glVertex3f( +0.5f, -0.5f,  -0.5f );
		glEnd();
		glBegin(GL_QUADS);
		glNormal3f( -1.0f, 0.0f, 0.0f );
		glTexCoord2f( 1.0f, 1.0f );
		glVertex3f( -0.5f, +0.5f,  -0.5f ); 
		glTexCoord2f( 0.0f, 1.0f );
		glVertex3f( -0.5f, +0.5f,  0.5f );
		glTexCoord2f( 0.0f, 0.0f );
		glVertex3f( -0.5f, -0.5f,  0.5f );
		glTexCoord2f( 1.0f, 0.0f );
		glVertex3f( -0.5f, -0.5f,  -0.5f );
		glEnd();

		glBegin(GL_QUADS);
		glNormal3f( 0.0f, 1.0f, 0.0f );
		glTexCoord2f( 1.0f, 1.0f );
		glVertex3f( -0.5f, +0.5f,  -0.5f ); 
		glTexCoord2f( 0.0f, 1.0f );
		glVertex3f( +0.5f, +0.5f,  -0.5f );
		glTexCoord2f( 0.0f, 0.0f );
		glVertex3f( +0.5f, +0.5f,  +0.5f );
		glTexCoord2f( 1.0f, 0.0f );
		glVertex3f( -0.5f, +0.5f,  +0.5f );
		glEnd();
		glBegin(GL_QUADS);
		glNormal3f( 0.0f, -1.0f, 0.0f );
		glTexCoord2f( 1.0f, 1.0f );
		glVertex3f( -0.5f, -0.5f,  -0.5f ); 
		glTexCoord2f( 0.0f, 1.0f );
		glVertex3f( +0.5f, -0.5f,  -0.5f );
		glTexCoord2f( 0.0f, 0.0f );
		glVertex3f( +0.5f, -0.5f,  +0.5f );
		glTexCoord2f( 1.0f, 0.0f );
		glVertex3f( -0.5f, -0.5f,  +0.5f );
		glEnd();


}




funkcja generująca bloki i nakładająca tekstury:
void sciany (void) {
	glNewList(mapa,GL_COMPILE);
		int mac[8][6]={
		{00,00,20,21,00,00},
		{00,04,21,20,00,00},
		{00,00,20,21,00,00},
		{00,01,21,20,00,01},
		{00,00,20,21,04,00},
		{00,00,21,20,00,00},
		{01,00,20,21,00,01},
		{00,00,21,20,00,00}, }

	for (int ia=0;ia<70;ia++){
		for (int ib=0;ib<6;ib++){

			if(mac[ia][ib]==1){
				
						//___________________________________________________________________________________B/A

				glPushMatrix();

				glColor3f(0.39f, 0.32f, 0.32f);
				glTranslated(ia, 0.4, ib); 
				glBindTexture( GL_TEXTURE_2D, 9);
				glScalef(1,1,1);
				CUTIL::drawBox();
				glBindTexture( GL_TEXTURE_2D, 0 );
				glPopMatrix();
							}}
glEndList();}


tworzenie tekstury:
static unsigned char* LoadBitmapFile( char *filename, BITMAPINFOHEADER *bitmapInfoHeader ) {

		FILE *filePtr;
		BITMAPFILEHEADER bitmapFileHeader;
		unsigned char *bitmapImage;
		int	imageIdx = 0;
		unsigned char tempRGB;

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

		fread(&bitmapFileHeader, sizeof(BITMAPFILEHEADER), 1, filePtr);
	
		fread(bitmapInfoHeader, sizeof(BITMAPINFOHEADER), 1, filePtr);

		fseek(filePtr, bitmapFileHeader.bfOffBits, SEEK_SET);

		bitmapImage = (unsigned char*)malloc(bitmapInfoHeader->biSizeImage);

		if (!bitmapImage) {
			free(bitmapImage);
			fclose(filePtr);
			return NULL;
		}

		fread(bitmapImage, 1, bitmapInfoHeader->biSizeImage, filePtr);

		if (bitmapImage == NULL) {
			fclose(filePtr);
			return NULL;
		}

		for (imageIdx = 0; imageIdx < (int)bitmapInfoHeader->biSizeImage; imageIdx+=3) {
			tempRGB = bitmapImage[imageIdx];
			bitmapImage[imageIdx] = bitmapImage[imageIdx + 2];
			bitmapImage[imageIdx + 2] = tempRGB;
		}
		fclose(filePtr);

		return bitmapImage;
	}



Ładowanie tekstur,oświetlenie tip...
void CGL::init(void){

	BITMAPINFOHEADER bitmapInfoHeader;
	unsigned char* bitmap_data = CUTIL::LoadBitmapFile( "1.bmp", &bitmapInfoHeader ); 

	if( bitmap_data != NULL ) {
		glBindTexture(GL_TEXTURE_2D, 9);
		glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
		glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
		glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, bitmapInfoHeader.biWidth,
			bitmapInfoHeader.biHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, bitmap_data);
		glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
		glEnable(GL_TEXTURE_2D);
	}
	mapa=glGenLists(1);
	// ustawienie parametrow kamery 
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluPerspective( 50, 1, 1, 1000);
	gluLookAt( 0, 0, -7, 0, 0, 0, 0, 1, 0 );
	// wyzerowanie transformacji modelu
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();

	sciany();
	glEnable( GL_DEPTH_TEST ); // wlaczenie bufora Z
	glEnable( GL_NORMALIZE ); // wlaczenie automatycznej normalizacji wektorow po skalowaniu

	// ustawienie parametrow zrodel swiatla

	//wartości składowe oświetlenia i koordynaty źródła światła
	GLfloat  ambientLight[] = { 0.5f, 0.5f, 0.5f, 1.0f };//swiatło otaczające
	GLfloat  diffuseLight[] = { 0.5f, 0.5f, 0.5f, 1.0f };//światło rozproszone
	GLfloat  specular[] = { 0.40f, 0.40f, 0.40f, 1.0f}; //światło odbite
	GLfloat  lightPos[] = { 50, 20, 3, 1 };//pozycja światła //(czwarty parametr określa odległość źródła: 
	//0.0f-nieskończona; 1.0f-określona przez pozostałe parametry)
	glEnable(GL_LIGHTING); //uaktywnienie oświetlenia
	//ustawienie parametrów źródła światła nr. 0
	glLightfv(GL_LIGHT0,GL_AMBIENT,ambientLight); //swiatło otaczające
	glLightfv(GL_LIGHT0,GL_DIFFUSE,diffuseLight); //światło rozproszone
	glLightfv(GL_LIGHT0,GL_SPECULAR,specular); //światło odbite
	glLightfv(GL_LIGHT0,GL_POSITION,lightPos); //pozycja światła
	glEnable(GL_LIGHT0); //uaktywnienie źródła światła nr. 0


	glEnable(GL_COLOR_MATERIAL); //uaktywnienie śledzenia kolorów
	glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE); //kolory ustalone za


	GLfloat  specref[] =  { 0.5f, 0.5f, 0.5f, 0.5f };//parametry odblaskowości
	glMaterialfv(GL_FRONT, GL_SPECULAR,specref);
	glMateriali(GL_FRONT,GL_SHININESS,120);
	glClearColor(  0.99	,  0.99	,0.99	 , 0 ); // ustawienie koloru tla
	glClear( GL_COLOR_BUFFER_BIT );
	glShadeModel( GL_SMOOTH ); // wlaczenie cieniowania Gouraud'a (smooth shading)
	glLoadIdentity();

	cgl.aseGeometry = CUTIL::loadASE( "chillmod.ase" );
	cgl.aseGeometry1 = CUTIL::loadASE( "logo.ase" );
	cgl.aseGeometry2 = CUTIL::loadASE( "logoa.ase" );
	cgl.dom = CUTIL::loadASE( "dom.ase" );
}

0

Strona 1 z 1


Szybka odpowiedź

  

Użytkownicy przeglądający ten temat: 1
0 użytkowników, 1 gości, 0 anonimowych


Zmień widoczność shoutboxa Shoutbox

emikyou  : (16 kwiecień 2012 - 13:26) @Ferrari: Na PŁ korzystają z "OpenGL SuperBible: Comprehensive Tutorial and Reference" i "OpenGL Programming Guide: The Official Guide to Learning OpenGL, Versions 3.0 and 3.1"
wtomczak  : (10 kwiecień 2012 - 09:27) masz problem z komputerem napisz na facebooku na stronie WT654, na pewno pomoże
Maciej :)  : (08 kwiecień 2012 - 09:36) A co do reklam, to mi na operze adBlock coś nie służy, szczególnie z postami bota redakcji :( od kiedy go dali, to zaczęło się walić..
Maciej :)  : (08 kwiecień 2012 - 09:35) Hej witam :) no, jak przestałem kupować Eksperta to wzięli i wstrzymali ;| także nie mam tylko numeru pierwszego i ostatniego :p trochę szkoda, parę lat się było...
neo5628  : (05 kwiecień 2012 - 21:57) Help http://forum.ks-ekspert.pl/topic/140746-problem-z-dzwiekiem/ Proszę
PiKey  : (21 marzec 2012 - 18:24) ludzie, pomóżcie :) http://forum.ks-ekspert.pl/topic/140418-jak-dziala-sprawdzanie-wykonania-zadania-na-stronach-typu-doladujse/
PiKey  : (21 marzec 2012 - 18:24) ds
A:-)Brunuś  : (17 marzec 2012 - 19:17) jest tu ktoś? http://forum.ks-ekspert.pl/topic/140400-firewire-obudowa-do-dysku-25-—-200-zlo/
Ferrari  : (16 marzec 2012 - 11:12) Polećcie dobrą książkę do OpenGL albo kurs w sieci :)
lisz55  : (15 marzec 2012 - 21:44) przez ktore reklamy? nie widze zeby jakies nowe byly
Pretender  : (15 marzec 2012 - 18:22) :/
Pretender  : (15 marzec 2012 - 18:22) az sie nie chce czytac tego forum przez te parszywe reklamy...ale dzidostwo zrobili...
yojo2  : (12 marzec 2012 - 13:26) wchodz na forum przez lynxa :P
Ferrari  : (10 marzec 2012 - 21:21) Jak tu nie korzystać z AdBlocka, kiedy Forum Eksperta wywala reklamę na całą stronę?
lisz55  : (09 marzec 2012 - 21:41) siedze i czytam calkiem niezle ale mogl by ktos wytlumaczyc o co chodzi z dark knightem nie widzialem tego filmu
lisz55  : (09 marzec 2012 - 21:40) to moze rozruszam troche czat http://moviesascode.net/
Pretender  : (06 marzec 2012 - 16:43) rozmowy tak jak Enty prowadziły w powieści Tolkiena :P
dawido90  : (05 marzec 2012 - 15:03) to już poprostu przyzwyczajenie
yojo2  : (04 marzec 2012 - 22:25) mailem przestac tu wchodzic, ale stwierdzilem ze skoro i tak zwykle tu tylko wchodze i wychodze, to wszystko jedno :P
Ferrari  : (04 marzec 2012 - 21:16) Już myślałem, że ruch na forum spada zera, a jednak pochodna zmieniła znak :)
Rozszerz pole shoutboxa