Look up a few modern OpenGL tutorials, most will explain how it works.
In short its usually something along the lines that you multiple your vertices by a matrix before you send them to your shader for drawing (or multiply the vertices in your shader).
Such matrices are usually created using a maths library (or you write such code yourself). Matrices copying those provided by GLU would look something like this:
import org.lwjgl.util.vector.Matrix4f;
import org.lwjgl.util.vector.Vector3f;
public class GLM {
public static Matrix4f ortho(float left, float right,
float bottom, float top,
float zNear, float zFar) {
Matrix4f m = new Matrix4f();
m.m00 = 2 / (right - left);
m.m11 = 2 / (top - bottom);
m.m22 = - 2 / (zFar - zNear);
m.m30 = - (right + left) / (right - left);
m.m31 = - (top + bottom) / (top - bottom);
m.m32 = - (zFar + zNear) / (zFar - zNear);
return m;
}
public static Matrix4f frustum(float left, float right,
float bottom, float top,
float zNear, float zFar) {
Matrix4f m = new Matrix4f();
m.m00 = (2 * zNear) / (right - left);
m.m11 = (2 * zNear) / (top - bottom);
m.m20 = (right + left) / (right - left);
m.m21 = (top + bottom) / (top - bottom);
m.m22 = -(zFar + zNear) / (zFar - zNear);
m.m23 = -1;
m.m32 = -(2 * zFar * zNear) / (zFar - zNear);
return m;
}
public static Matrix4f perspective(float fovy, float aspect, float zNear, float zFar) {
float range = (float) Math.tan(Math.toRadians(fovy / 2)) * zNear;
float left = -range * aspect;
float right = range * aspect;
float bottom = -range;
float top = range;
Matrix4f m = new Matrix4f();
m.m00 = (2 * zNear) / (right - left);
m.m11 = (2 * zNear) / (top - bottom);
m.m22 = - (zFar + zNear) / (zFar - zNear);
m.m23 = - 1;
m.m32 = - (2 * zFar * zNear) / (zFar - zNear);
return m;
}
public static Matrix4f lookAt(Vector3f eye, Vector3f center, Vector3f up) {
Vector3f forward = Vector3f.sub(center, eye, null);
forward.normalise(forward);
Vector3f u = up.normalise(null);
Vector3f side = Vector3f.cross(forward, u, null);
side.normalise(side);
Vector3f.cross(side, forward, u);
Matrix4f m = new Matrix4f();
m.m00 = side.x;
m.m10 = side.y;
m.m20 = side.z;
m.m01 = u.x;
m.m11 = u.y;
m.m21 = u.z;
m.m02 = -forward.x;
m.m12 = -forward.y;
m.m22 = -forward.z;
m.translate(new Vector3f(-eye.x, -eye.y, -eye.z));
return m;
}
}