3rd person camera?

Alright, so I’m trying to make a 3rd person camera, and I heard not to use gluLookAt cause that’s for fixed cameras, so my first question is what method should I use for a moving camera?

Can someone tell me why my camera class isn’t working correctly? I set the position vector to (0,0,-10) and the look at vector to (0,0,0) but when I draw something on (0,0,0) it isn’t there. I’m very new to vector math and matrix stuff, so I’m betting it’s LookThrough() where the problem is.

    import org.lwjgl.opengl.GL11;
    import org.lwjgl.util.vector.Matrix3f;
    import org.lwjgl.util.vector.Vector3f;
    
    public class Camera {
    	 //3d vector to store the camera's position in
        Vector3f position = null;
        Vector3f lookAt = null;
        //the rotation around the Y axis of the camera
        float yaw = 0;
        
        //the rotation around the X axis of the camera
        float pitch = 0;
        
        //the rotation around the Z axis of the camera
        float roll = 0;
        
        public Camera(float x, float y, float z)
        {
            //instantiate position Vector3f to the x y z params.
            position = new Vector3f(x, y, z);
            lookAt = new Vector3f();
        }
        
        public void lookThrough()
        {
        	Matrix3f m = new Matrix3f();
        	
        	
        	
        	Vector3f out = new Vector3f();
        	Vector3f.sub(position, lookAt, out);
        	out.normalise();
        	//set forward vector
        	m.m00 = out.x;
        	m.m01 = out.y;
        	m.m02 = out.z;
        	
        	//set right vector
        	m.m10 = 1;
        	m.m11 = 0;
        	m.m12 = 0;
        	
        	//set up vector
        	m.m20 = 0;
        	m.m21 = 1;
        	m.m22 = 0;
        	
        	yaw = (float) -(Math.tan(m.m10/m.m00));
        	pitch = (float) -(Math.tan((-m.m20)/(Math.sqrt(Math.pow(m.m21, 2) + Math.pow(m.m22, 2)))));
        	roll = (float) -(Math.tan(m.m21/m.m22));
        	
            //roatate the pitch around the X axis
            GL11.glRotatef(pitch, 1.0f, 0.0f, 0.0f);
            //roatate the yaw around the Y axis
            GL11.glRotatef(yaw, 0.0f, 1.0f, 0.0f);
            //roatate the yaw around the Y axis
            GL11.glRotatef(roll, 0.0f, 0.0f, 1.0f);
            //translate to the position vector's location
            GL11.glTranslatef(position.x, position.y, position.z);
        }
    }