Thanks. But it's fairly easy if you want to try it out for yourself. (*cough* Says the man that a few spend hours researching *cough*) The actual complex stuff is done by gamemaker for you, so you can get a long a way with just experimenting if you get the general gist.
I like teaching so, let me see if I can explain (without going into too much detail):
Consider your game as having phones floating above your rooms to determine what gets drawn on your monitor/screen. We'll call the phone we normally use "view[0]". Normally the phone copies (=not films) a little part the room directly below it and then resizes it like you would a screenshot.
Now, you can tell gamemaker to stop making things easy for us and just turn on the phone´s camera instead to get the image. The phone will record like in real life: with depth and perspective.
First you tell the phone you want to display with this perspective.
camera_set_proj_mat(view_camera[0], matrix_build_projection_ortho(global.view_w, global.view_h, 1, 100000));
You don't have to understand the functions really. Just know that view_camera[0] is me telling gamermaker the reference to the phone, which was view[0]. Next there is a specific function to tell the game that we want to display stuff with perspective. Again, you don't have to understand what it does, just that it needs 4 pieces of information from you: how wide and tall the image should be (= I use the screen width and height), and what the draw distance should be (= I want to display everything between distance 1 and a milion away from the camera - so I basically just want to see everything). The distance thing is more relevant for 3d games where you don't draw people very far away from you, or the wall directly in front of the camera.
Next you need to tell the game how your phone is pointing to your room.
camera_set_view_mat(view_camera[0], matrix_build_lookat(iX, iY, -70, iX, iY, 0, 0, 1, 0))
Picture the room as a piece of paper on the floor. First I again tell the game that I want to adjust something about my specific "phone" by referencing it with view_camera[0]. Next I need to tell it how I'm holding it with 9 values. The first 3 values represent the point you want to look from; meaning the x,y,z position. I want to display from height 70 above room position iX, iY. The next 3 values represent the point I'm looking towards. I want to look directly down so I'm looking at the same iX,iY room at height 0 because I'm looking AT the room. Finally it is asking me how I'm holding my phone in x,y,z terms. (0,1,0) means I'm holding it like normal. (1,0,0) means I'm holding it sideways. And (0,0,1) means I'm standing on the room like it was a piece of paper and then start looking at a wall or something rather then down to the floor. I want to look at the room normally so I´m using (0,1,0)
And finally:
camera_set_view_mat(view_camera[0], matrix_build_lookat(iX, iY+10, -70, iX, iY, 0, 0, 1, 0))
Now I'm slightly changing the location I'm holding the phone at (by adding +10), while still looking at the same point in the room. So instead of looking straight down I'm looking at an angled. And voila. You're done.
All the other code is just to tell the phone to go back to it's default settings when you're down. And you can play around with the values to adjust the angles and stuff.