Pomoc oko algoritma

Pomoc oko algoritma

offline
  • Pridružio: 19 Maj 2011
  • Poruke: 297

Napisano: 19 Maj 2013 0:27

Evo vec par sati, ne mogu da smislim resenje za jedan problem, pa se nadam da ce mi neko ovde pomoci jer sam se skroz smorio i nemam vise ideja.

Imam neki pravougaonik i hocu da ga podelim na vise kvadrata, odnosno da izracunam njihove tacke i koordinate textura. Ovoliko sam stigao:

  1. static const float quadDiv = 200.0f;
  2.       static const float epsilon = 0.001f;
  3.  
  4.       std::size_t horCnt  = (std::size_t)std::ceil(dim.x / quadDiv);
  5.       std::size_t vertCnt = (std::size_t)std::ceil(dim.y / quadDiv);
  6.  
  7.       for(std::size_t i = 0; i < horCnt; ++i)
  8.       {
  9.          for(std::size_t j = 0; j < vertCnt; ++j)
  10.          {
  11.             float x = i * quadDiv;
  12.             float y = j * quadDiv;
  13.  
  14.             float xx = x + quadDiv;
  15.             float yy = y + quadDiv;
  16.             float xxmod = std::fmod(xx, dim.x);
  17.             xx = ( xxmod > epsilon) ? xxmod : xx;
  18.             float yymod = std::fmod(yy, dim.y);
  19.             yy = ( yymod > epsilon) ? yymod : yy;
  20.  
  21.             xx = (xx > epsilon) ? xx : quadDiv;
  22.             yy = (yy > epsilon) ? yy : quadDiv;
  23.  
  24.             float xint, xfrac, yint, yfrac;
  25.             xfrac = std::modf(xx / quadDiv, &xint);
  26.             yfrac = std::modf(yy / quadDiv, &yint);
  27.  
  28.             D3DXVECTOR2 texCoords[4];
  29.             texCoords[0] = D3DXVECTOR2(0.0f,                  0.5f);
  30.             texCoords[1] = D3DXVECTOR2(0.5f / (1.0f - xfrac), 0.5f);
  31.             texCoords[2] = D3DXVECTOR2(0.5f / (1.0f - xfrac), 1.0f / (1.0f - yfrac));
  32.             texCoords[3] = D3DXVECTOR2(0.0f,                  1.0f / (1.0f - yfrac));
  33.  
  34.             D3DXVECTOR3 vertCoords[4];
  35.             vertCoords[0] = D3DXVECTOR3(absPos.x + x,   absPos.y + y,  pos.z);
  36.             vertCoords[1] = D3DXVECTOR3(absPos.x + xx,  absPos.y + y,  pos.z);
  37.             vertCoords[2] = D3DXVECTOR3(absPos.x + xx,  absPos.y + yy, pos.z);
  38.             vertCoords[3] = D3DXVECTOR3(absPos.x + x,   absPos.y + yy, pos.z);
  39.  
  40.             drawer->addVertex(Vertex(vertCoords[0], texCoords[0], color)); // top left
  41.             drawer->addVertex(Vertex(vertCoords[1], texCoords[1], color)); // top right
  42.             drawer->addVertex(Vertex(vertCoords[2], texCoords[2], color)); // bottom right
  43.             drawer->addVertex(Vertex(vertCoords[3], texCoords[3], color)); // bottom left 
  44.          }
  45.       }


dim su dimenzije pravougaonika
quadDiv je dimenzija kvadrata
Za ostalo govore sama imena promenjljivih.
Za texture koordinate uzimam samo donju levu cetvrtinu texture posto se tu nalazi deo koji treba da crtam po kvadratima (textura sadrzi vise komponenti).

Ako neko ima drugu ideju, treba jos informacija ili vidi gde je greska neka javi.

Hvala na izdvojenom vremenu.

Dopuna: 19 Maj 2013 10:10

Mislim da je reseno:
  1. float x = i * quadDiv;
  2.             float y = j * quadDiv;
  3.  
  4.             float xx = std::fmod( x + quadDiv, dim.x);
  5.             float yy = std::fmod( y + quadDiv, dim.y);
  6.  
  7.             xx = (xx < quadDiv) ? (quadDiv - xx) + x : xx;
  8.             yy = (yy < quadDiv) ? (quadDiv - yy) + y : yy;



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
Ko je trenutno na forumu
 

Ukupno su 902 korisnika na forumu :: 57 registrovanih, 9 sakrivenih i 836 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: Aleksa-, Aleksej, aramis s, arsa, Bane san, Black Luster Soldier, BLACKBIRD201284, Bobrock1, bojanstros9, bukefal, CikaKURE, Cvijo_ue, DalmatinacMF, dearg, debeli, DejanSt, deLacy, dendrit86, DezurniOperativni, Dimitrise93, Dogma21, draganca, drimer, FOX, Goksi95, goxin, InzenjerBL, ivicasimo, Jakonjveliki, jodzula, jon istvan, LostInSpaceandTime, Lošmi, Marko Marković, medaTT, mercedesamg, mikidragi, MILO-VAN, milutin134, Ne doznajem se u oružje, Papadubi, pceklic, PO1974, proka89, Regrut Boskica, S.Palestinac, sistem22, Siti2, ss10, sspp, Stanislav1970, Trpe Grozni, vaci, vidra1, Vladonius, vukdra, XBMC