[ Srki_82 @ 08.09.2004. 20:15 ] @
Koristim ID3DXSprite za prikazivanje point sprite-ova, ali imam problema sa teksturom koju koristim. To je 24b bmp slika na kojoj se nalaze nijanse sive boje... verovatno pretpostavljate za cega ona sluzi. Tamo gde je textura skroz bela pixel u point sprite treba da ima alpha vrednost 1, a kako je boja na texturi tamnija tako i alpha vrednost treba da opada. Kada postavim takvu texturu i iscrtam sprite textura se vidi takva kakva jeste... tj, tamo gde je bela, bela je, tamo gde je siva, siva je, tamo gde je crna crna je... pozadina se ne vidi ni kroz jedan deo sprite-a. Da li je moguce uraditi to sto zelim sa ID3DXSprite i kako (da li bi mozda pomoglo da koristim 32b texturu sa podacima o alpha vrednosti?)?
[ Srki_82 @ 08.09.2004. 22:27 ] @
32bitna slika pomaze :)
[ Srki_82 @ 09.09.2004. 16:39 ] @
Da bih promenio velicinu sprajta koristim scaling matricu, ali kad je postavim onda ona utice i na koordinate koje prosledim Draw funkciji... postoji li neki drugi nacin da se postavi velicina sprajta sa ID3DXSprite?
[ Reljam @ 09.09.2004. 17:01 ] @
Najverovatnije mnozis matrice u pogresnom redosledu. Pretpostavljam da koristis ID3DXSprite::SetTransfrom? Zakaci relevantan deo koda ovde (u poruku), pa da pogledamo.
[ Srki_82 @ 09.09.2004. 18:03 ] @
Deo koda koji iscrtava sprajtove:
Code:

void CMMParticleSystem::Draw( LPDIRECT3DDEVICE9 DEVICE )
{
    particle->Begin( D3DXSPRITE_ALPHABLEND );
    D3DSURFACE_DESC pDesc;
    texture->GetTexture()->GetLevelDesc( 0, &pDesc );
    D3DXMATRIXA16 scale;
    D3DXMatrixScaling( &scale, 1.0f / pDesc.Width * particlesize,
        1.0f / pDesc.Height * particlesize, 1.0f );
    particle->SetTransform( &scale );
    for( int i = 0; i < particlenum; ++i )
    {
        D3DXVECTOR3 pos = particles[i]->GetPosition();
        pos.x *= pDesc.Width / particlesize;
        pos.y *= pDesc.Height / particlesize;
        particle->Draw( texture->GetTexture(), NULL, NULL, &pos,
            particles[i]->GetColor() );
    };
    particle->End();
};


ovaj kod radi onako kako treba... koordinate su tacne bez obzira na velicinu sprajta, ali kada napisem ovako (kako sam prvi put uradio):
Code:

void CMMParticleSystem::Draw( LPDIRECT3DDEVICE9 DEVICE )
{
    particle->Begin( D3DXSPRITE_ALPHABLEND );
    D3DSURFACE_DESC pDesc;
    texture->GetTexture()->GetLevelDesc( 0, &pDesc );
    D3DXMATRIXA16 scale;
    D3DXMatrixScaling( &scale, 1.0f / pDesc.Width * particlesize,
        1.0f / pDesc.Height * particlesize, 1.0f );
    particle->SetTransform( &scale );
    for( int i = 0; i < particlenum; ++i )
    {
        particle->Draw( texture->GetTexture(), NULL, NULL,
            particles[i]->GetPosition(),
            particles[i]->GetColor() );
    };
    particle->End();
};


onda scale matrica pomera i koordinate sparjta.