Renders a 2D Slick Image in a 3D space (with x/y/z rotation). Example:

Requires lwjgl-util.jar for the GLU portion. You could do without the dependency by writing your own
gluPerspective method.
The position is defined by world coordinates (0,0,0 is center). Here is an example call (notice the negative Z value to scale it down):
Code:
drawImage3D(container, myImage, 0f, 0f, -5f, 0f, 0f, 0f, null);
Code:
import org.lwjgl.opengl.GL11;
import org.lwjgl.util.glu.GLU;
...
public void drawImage3D(GameContainer container, Image image,
float worldX, float worldY, float worldZ,
float xTilt, float yTilt, float zTilt, Color filter) {
SlickCallable.enterSafeBlock();
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GLU.gluPerspective(45.0f,container.getWidth()/(float)container.getHeight(),0.1f,100);
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glLoadIdentity();
GL11.glShadeModel(GL11.GL_SMOOTH);
GL11.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
GL11.glClearDepth(1.0f);
GL11.glDisable(GL11.GL_DEPTH_TEST);
GL11.glDepthFunc(GL11.GL_LEQUAL);
GL11.glHint(GL11.GL_PERSPECTIVE_CORRECTION_HINT, GL11.GL_NICEST);
GL11.glLoadIdentity();
GL11.glTranslatef(worldX, worldY, worldZ);
GL11.glRotatef(xTilt, 1f, 0, 0);
GL11.glRotatef(yTilt, 0f, 1f, 0);
GL11.glRotatef(zTilt, 0f, 0f, 1f);
image.bind();
float textureOffsetX = image.getTextureOffsetX();
float textureOffsetY = image.getTextureOffsetY();
float textureWidth = image.getTextureWidth();
float textureHeight = image.getTextureHeight();
float x = 0;
float y = 0;
float width = 1f;
float height = -image.getHeight()/(float)image.getWidth();
if (filter!=null)
filter.bind();
else
Color.white.bind();
GL11.glBegin(GL11.GL_QUADS);
//TOP LEFT
GL11.glTexCoord2f(textureOffsetX, textureOffsetY);
GL11.glVertex3f(x, y, 0);
//BOTTOM LEFT
GL11.glTexCoord2f(textureOffsetX, textureOffsetY + textureHeight);
GL11.glVertex3f(x, y + height, 0);
//BOTTOM RIGHT
GL11.glTexCoord2f(textureOffsetX + textureWidth, textureOffsetY
+ textureHeight);
GL11.glVertex3f(x + width, y + height, 0);
//TOP RIGHT
GL11.glTexCoord2f(textureOffsetX + textureWidth, textureOffsetY);
GL11.glVertex3f(x + width, y, 0);
GL11.glEnd();
SlickCallable.leaveSafeBlock();
}