Particles are getting bigger...
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)
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?
(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?
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?
#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
Popular Topics
Advertisement