Particle/Billboard rotation issues

OK, working on a particle engine and I’m having trouble getting the particles to face the camera properly. Basically what happens is since I’m using the projection matrix to rotate them they rotate in place based on the camera rotation which leads to distortion when looking any direction other than directly down +z and -z. Any tips?

FYI: I’ve been looking at other examples and they all use the modelview identity matrix then apply a translation to achieve this effect, but my modelview matrix is always at the identity unless I render something, then I pop the stack…so I’m confused to say the least.

here’s the relevant code:

Particle draw

	public void draw(GL2 gl)
	{
		gl.glMatrixMode(GL2.GL_PROJECTION);
		gl.glPushMatrix();
		gl.glTranslatef(m_position.m_x, m_position.m_y, m_position.m_z);
		gl.glGetFloatv(GL2.GL_PROJECTION_MATRIX, m_proj, 0);

		//make sure the upper left hand 3x3 is identity
		m_proj[0] = 1.0f;
		m_proj[1] = 0.0f;
		m_proj[2] = 0.0f;
		m_proj[4] = 0.0f;
		m_proj[5] = 1.0f;
		m_proj[6] = 0.0f;
		m_proj[8] = 0.0f;
		m_proj[9] = 0.0f;
		m_proj[10] = 1.0f;

		m_buffer_data.put(m_proj);
		m_buffer_data.flip();
		gl.glLoadMatrixf(m_buffer_data);

		//draw the particle for testing
		gl.glBegin(GL2.GL_TRIANGLE_STRIP);
			gl.glTexCoord2f(1, 1);	gl.glVertex3f(m_size, m_size, 0);
			gl.glTexCoord2f(0, 1);	gl.glVertex3f(-m_size, m_size, 0);
			gl.glTexCoord2f(1, 0);	gl.glVertex3f(m_size, -m_size, 0);
			gl.glTexCoord2f(0, 0);	gl.glVertex3f(-m_size, -m_size, 0);
		gl.glEnd();

		gl.glPopMatrix();
	}

Emitter draw


        gl.glEnable(GL.GL_BLEND);
		gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA);
		for(int i = 0; i < m_particles.size(); i++)
			m_particles.get(i).draw(gl);
		gl.glDisable(GL.GL_BLEND);

Current Camera init:


        gl.glMatrixMode(GLMatrixFunc.GL_PROJECTION);
		gl.glLoadIdentity();
		glu.gluPerspective(m_fov, (float)(window_width) / (float)(window_height), m_z_near, m_z_far);
		
		gl.glRotatef(-m_pitch, 1.0f, 0.0f, 0.0f);
		gl.glRotatef(-m_yaw, 0.0f, 1.0f, 0.0f);
		gl.glTranslatef(-m_transform.m_translate.m_x, -m_transform.m_translate.m_y, -m_transform.m_translate.m_z);