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.