Particles are getting bigger...

Started by
3 comments, last by Macius 18 years ago
I`ve just implemented my particle emitter class and all works fine but the particles are getting bigger when I move away my camera! I have set SetRenderState(D3DRS_POINTSCALEENABLE, TRUE); so my understanding is that the particle size is in world units. Even when I change it to FALSE I can't see any diffrence. Is this normal? Is there any way to change it? I tried to solve this with vertex shader but particles size outputed by VS is also scalled by DX. Please help:)(SDK February 2006)
Advertisement
Have you seen this page on MSDN?

Point Sprites
John BoltonLocomotive Games (THQ)Current Project: Destroy All Humans (Wii). IN STORES NOW!
Yes i think the answer is somewhere there. But I just can't see why my particles using any combination of A, B and C (>1) are getting bigger when I move my camera away. According to this formula :Ss = Vh * Si * sqrt(1/(A + B * De + C *( D e2 )))
(Ss - output size in camera units, De - distance from camera, Si - input size)
I think they should shrink when De is getting bigger ,not the other way. Where do I make a mistake?
I think you set it up wrong, look for particle scale or something.
Here is my code:

#define SIMPLE_PARTICLE_FVF (D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_PSIZE)
{
......
}
m_pD3DDevice->SetFVF(SIMPLE_PARTICLE_FVF); m_pD3DDevice->SetStreamSource(0,m_pVertexBuffer,0,sizeof(SSimpleParticleVertex));

m_pD3DDevice->SetRenderState( D3DRS_POINTSPRITEENABLE, TRUE );
m_pD3DDevice->SetRenderState( D3DRS_POINTSCALEENABLE, TRUE );

float fMinSize = 1.0f;//ma byc tak
m_pD3DDevice->SetRenderState( D3DRS_POINTSIZE, *((DWORD*)&m_fSizeMin)); m_pD3DDevice->SetRenderState( D3DRS_POINTSIZE_MIN,*((DWORD*)&fMinSize)); m_pD3DDevice->SetRenderState(D3DRS_POINTSIZE_MAX,*((DWORD*)&m_fSizeMax));
fMinSize = 0.0f;//ma byc tak
m_pD3DDevice->SetRenderState( D3DRS_POINTSCALE_A, *((DWORD*)&fMinSize));
fMinSize = 0.0f;
m_pD3DDevice->SetRenderState( D3DRS_POINTSCALE_B, *((DWORD*)&fMinSize));
fMinSize = 1.0f;
m_pD3DDevice->SetRenderState( D3DRS_POINTSCALE_C, *((DWORD*)&fMinSize));


m_pD3DDevice->SetFVF(SIMPLE_PARTICLE_FVF);
m_pD3DDevice->SetStreamSource(0,m_pVertexBuffer,0,sizeof(SSimpleParticleVertex));

m_pD3DDevice->DrawPrimitive(D3DPT_POINTLIST,0,m_dwAlivePartCount);

Now as I look at it I think that the particles are not scalled and stays in camera units (so when I move away they seem to be getting bigger comparing to other objects) . But why? Is it some stupid mistake of mine?

This topic is closed to new replies.

Advertisement