I am currently writing a small program using LWJGL to generate a low poly scene. I first rendered a house. Then I rendered the terrain. Lastly, I rendered the water. The water was originally a flat plane of vertices. I did some displacements in the vertex shader using the Perlin noise algorithm to generate some waves(i.e. I can't obtain the actual water level at a particular point). When I rendered the scene, I observed some serrated edges.
The situation is even worse when viewing from a larger distance.
What are they? How can I remove them? Sorry that I can't upload the code. Because the number of lines are too large.
Edit 1:
private float FOV = 70;
private float NEAR_PLANE = .1f;
private float FAR_PLANE = 1000f;
private void createProjectionMatrix() {
float aspectRatio = (float) Display.getWidth() / (float) Display.getHeight();
float y_scale = (float) ( (1f/ Math.tan(FOV/2f))*aspectRatio );
float x_scale = y_scale / aspectRatio;
float frustum_length = FAR_PLANE - NEAR_PLANE;
projectionMatrix = new Matrix4f();
projectionMatrix.m00 = x_scale;
projectionMatrix.m11 = y_scale;
projectionMatrix.m22 = -((FAR_PLANE + NEAR_PLANE) / frustum_length);
projectionMatrix.m23 = -1;
projectionMatrix.m32 = -((2*NEAR_PLANE * FAR_PLANE) / frustum_length);
projectionMatrix.m33 = 0;
}