Hi!
At first, I thought of suggesting an orthographic projection, but then I saw that your objects are getting smaller in the distance (perspective-like). This is rather tricky.
Maybe there is some easy matrix to achieve this, I don’t know. (One of the off-center matrices perhaps? I honestly don’t know.)
But, in case there is not, you could try to use two viewprojection matrices. The first one is a perspective matrix centered above the object, thereby producing the 3D look you want to have. Afterwards you move the object by a translation in clipping space to the desired position. The offset vector could probably be somehow found by using the “cameras” viewprojection matrix (probably orthographic) to see, where the vertex is on the screen and how far it is away from the camera. I’m not quite sure, whether this works so easily. It’s essentially the idea of rendering the objects to small imposters and then placing the imposters (except that you don’t need to render the object (and depth) to a texture, but instead just moved it to the desired position in the vertex shader).
Maybe you could pick up the imposter idea, which means you'd render your objects with the perspective projection to a texture atlas and then just render textured, viewport-aligned quads (billboards) to show them in the final scene. (If your atlas contains depth, you can adjust the output depth of the billboard pixels to get proper depth tests.)
I hope this helps at least a little.
Edited by Tsus, 01 June 2012 - 01:57 AM.