If you want them to look 3D (i.e. diminish as they get farther away) then you need to use GL11.glPerspective() to create the viewing volume. Then you can define some (more or less) arbitrary plane on the Z-Axis to be the "ground." From the camera's point of view it will look like it is looking straight down on some buildings.
-=EDIT=-
Here is a little program that shows what I am talking about! Use the arrow keys to move the cylinder around.
import org.lwjgl.LWJGLException;
import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.glu.Cylinder;
import org.lwjgl.opengl.glu.GLU;
public class CityView
{
private DisplayMode mode;
private boolean done;
private Cylinder tube = new Cylinder();
private float x, y;
public static void main(String[] args)
{
new CityView();
}
public CityView()
{
createDisplay();
initGL();
run();
}
private void createDisplay()
{
try
{
//find displaymode
DisplayMode[] modes = Display.getAvailableDisplayModes();
for (int i = 0; i < modes.length; i++)
{
if (modes[i].getWidth() == 640 &&
modes[i].getHeight() == 480 &&
modes[i].getBitsPerPixel() >= 32 &&
modes[i].getFrequency() == 60)
{
mode = modes[i];
break;
}
}
Display.setDisplayMode(mode);
Display.setTitle("CityView");
Display.create();
return;
}
catch (LWJGLException e)
{
e.printStackTrace();
}
}
private void initGL()
{
GL11.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
GL11.glClearDepth(1.0);
GL11.glEnable(GL11.GL_DEPTH_TEST);
GL11.glDepthFunc(GL11.GL_LEQUAL);
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GLU.gluPerspective(45f, (float)mode.getWidth()/(float)mode.getHeight(), 0.1f, 100f);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glLoadIdentity();
GL11.glViewport(0, 0, mode.getWidth(), mode.getHeight());
}
private void run()
{
while(!done)
{
mainloop();
render();
try
{
Thread.sleep(1);
}
catch(InterruptedException ie)
{
ie.printStackTrace();
}
}
Display.destroy();
System.exit(0);
}
private void mainloop()
{
if(Keyboard.isKeyDown(Keyboard.KEY_ESCAPE) || Display.isCloseRequested())
{
done = true;
}
if(Keyboard.isKeyDown(Keyboard.KEY_UP)) y += 0.05f;
if(Keyboard.isKeyDown(Keyboard.KEY_DOWN)) y -= 0.05f;
if(Keyboard.isKeyDown(Keyboard.KEY_RIGHT)) x += 0.05f;
if(Keyboard.isKeyDown(Keyboard.KEY_LEFT)) x -= 0.05f;
}
private void render()
{
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);
GL11.glLoadIdentity();
GL11.glTranslatef(x, y, -50.0f);
GL11.glColor3f(1.0f, 1.0f, 1.0f);
tube.draw(5f, 5f, 15f, 20, 1);
Display.update();
}
}