Skocz do zawartości

MarcinMa

Użytkownik
  • Postów

    1
  • Dołączył

  • Ostatnia wizyta

Osiągnięcia MarcinMa

Newbie

Newbie (1/14)

0

Reputacja

  1. 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" );}
×
×
  • Dodaj nową pozycję...