Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: OpenGL - ongelma teksturoinnissa

Sivun loppuun

Cc [26.01.2010 14:46:00]

#

Kun lataan ohjelmaani monta eri objektia jostain syystä muutaman objektin teksturoinnissa tapahtuu jotain hyvin erikoista, mitä ei pitäisi tapahtua. http://www.funkyap.com/Nimetön.png esimerkkinä pallo mikä on levyn keskellä teksturoituu oikein mutta levy ja taivas teksturoituu väärin. http://www.funkyap.com/ohjelma.png tässä taas 27 ensimmäistä objektia teksturoituu oikein (27 palikkaa mistä kuutio on rakennettu) ja taas levy ja taivas teksturoituu väärin , jos lisään tuonne pallon niin sekin teksturoituu oikein ja mallinnus ohjelmalla tarkastin että tiedostot on kunnossa eli siellä kaikki teksturoituu oikein.

// Funktio tekstuurien lataamiseen
int LoadGLTextures(std::string texturepath) {

 // Tila
 int Status = 1;

 // Luodaan säilytys tila
 SDL_Surface *TextureImage[1];

 // Ladataan kuva, katsotaan tuliko virheitä, jos tuli niin poistutaan
 if ((TextureImage[0] = SDL_LoadBMP(texturepath.c_str()))) {

  // Laitetaan tila kuntoon
  Status = 0;

  // Luodaan tekstuuri
  glGenTextures(1, &variables::Model[variables::freeHandle].Material.texture);

  // Tavallinen tekstuurin generointi käyttäen dataa BMP tiedostosta
  glBindTexture(GL_TEXTURE_2D, variables::Model[variables::freeHandle].Material.texture);

  // Luodaan tekstuuri
  glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->w, TextureImage[0]->h, 0, GL_BGR, GL_UNSIGNED_BYTE, TextureImage[0]->pixels);

  // Lineaarinen suodatus
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
 }

 // Vapautetaan muisti ja kasvatetaan tekstuuri muuttujaa
 if (TextureImage[0]) { SDL_FreeSurface(TextureImage[0]); }
 variables::textures++;

 // Poistutaan
 return Status;
}

Metabolix [26.01.2010 14:58:38]

#

Mitkä ovat ladatun kuvan w, h, pitch ja format->BytesPerPixel? Toimiiko, jos vaihdat glTexImage2D:n tilalle tämän funktion?

vehkis91 [26.01.2010 16:29:23]

#

MIkä seuraavan tarkoitus on? ei varmaan liity ongelmaan mitenkään, pisti vaan silmään.

SDL_Surface *TextureImage[1];

//Tuohan on sama kuin:
//SDL_Surface *TextureImage;?

os [26.01.2010 17:00:29]

#

vehkis91: ei ole

Teuro [26.01.2010 17:13:33]

#

Tuo on SDL_Surface* tyyppinen taulukko pintoja varten. Voit esimerkiksi ladata valmiiksi taulukkoon kuvat piirtoa varten. Tosin enemmän joustavuutta saapi tuon kuvavaraston avulla.

Cc [26.01.2010 17:51:16]

#

Metabolix: tuolla sinun funktiolla sain texturoinnin toimimaan joten tutkin sitä ja muokkaan sitä omien tarpeiden mukaan. kiitos avusta

vehkis91 [26.01.2010 19:27:12]

#

No vielä viitaten tohon mun kysymykseen, tuohon taulukkoon mahtuu tasan 1 kuvapinta, joten mitä järkeä on pitää taulukkoa?

Teuro [26.01.2010 19:36:06]

#

Toisaalta lisäämällä alkioita ja kääntämällä uudelleen saa niitä lisää helpolla...

vehkis91 [26.01.2010 19:42:01]

#

Jep, silloin se onkin kätevä, mutta viittasin juuri aikaisempaan koodiin, ettei siin tapauksessa oo mitään hyötyä siitä. Mutta asia selvitetty.

Cc [26.01.2010 21:20:54]

#

vehkis91: niitä on useampi siinä mutta kun yritin saada koodiani toimimaan niin muuttelin sitä sen mukaan että monta tekstuuria tarvitsee ladata ja tuolloin satuin tarvitsemaan vain yhden.

Metabolix [26.01.2010 21:25:42]

#

Muuten: kasvatat tekstuurilaskuria, vaikka lataus epäonnistuisi.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta