|
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;
|