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:

static const float quadDiv = 200.0f;       static const float epsilon = 0.001f;       std::size_t horCnt  = (std::size_t)std::ceil(dim.x / quadDiv);       std::size_t vertCnt = (std::size_t)std::ceil(dim.y / quadDiv);       for(std::size_t i = 0; i < horCnt; ++i)       {          for(std::size_t j = 0; j < vertCnt; ++j)          {             float x = i * quadDiv;             float y = j * quadDiv;             float xx = x + quadDiv;             float yy = y + quadDiv;             float xxmod = std::fmod(xx, dim.x);             xx = ( xxmod > epsilon) ? xxmod : xx;             float yymod = std::fmod(yy, dim.y);             yy = ( yymod > epsilon) ? yymod : yy;             xx = (xx > epsilon) ? xx : quadDiv;             yy = (yy > epsilon) ? yy : quadDiv;             float xint, xfrac, yint, yfrac;             xfrac = std::modf(xx / quadDiv, &xint);             yfrac = std::modf(yy / quadDiv, &yint);             D3DXVECTOR2 texCoords[4];             texCoords[0] = D3DXVECTOR2(0.0f,                  0.5f);             texCoords[1] = D3DXVECTOR2(0.5f / (1.0f - xfrac), 0.5f);             texCoords[2] = D3DXVECTOR2(0.5f / (1.0f - xfrac), 1.0f / (1.0f - yfrac));             texCoords[3] = D3DXVECTOR2(0.0f,                  1.0f / (1.0f - yfrac));             D3DXVECTOR3 vertCoords[4];             vertCoords[0] = D3DXVECTOR3(absPos.x + x,   absPos.y + y,  pos.z);             vertCoords[1] = D3DXVECTOR3(absPos.x + xx,  absPos.y + y,  pos.z);             vertCoords[2] = D3DXVECTOR3(absPos.x + xx,  absPos.y + yy, pos.z);             vertCoords[3] = D3DXVECTOR3(absPos.x + x,   absPos.y + yy, pos.z);             drawer->addVertex(Vertex(vertCoords[0], texCoords[0], color)); // top left             drawer->addVertex(Vertex(vertCoords[1], texCoords[1], color)); // top right             drawer->addVertex(Vertex(vertCoords[2], texCoords[2], color)); // bottom right             drawer->addVertex(Vertex(vertCoords[3], texCoords[3], color)); // bottom left           }       }

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:
float x = i * quadDiv;             float y = j * quadDiv;             float xx = std::fmod( x + quadDiv, dim.x);             float yy = std::fmod( y + quadDiv, dim.y);             xx = (xx < quadDiv) ? (quadDiv - xx) + x : xx;             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 661 korisnika na forumu :: 4 registrovanih, 0 sakrivenih i 657 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: Hoegaarden, pacika, Snorks, vranjanac29