Based off of QbsidianH20's comment, to do it with commands only, follow the below guide which extra information can be found here.
To start off, the command you are looking for is shown below:
/tp [target player] <x> <y> <z> [<y-rot> <x-rot>]
Syntax for the above command:
[target player] is the player that will be teleported.
<x> is the X coordinate the targeted player will be teleported to.
<y> is the Y coordinate the targeted player will be teleported to.
<z> is the Z coordinate the targeted player will be teleported to.
[<y-rot> <x-rot>] is the rotation on the Y and X axis that the player will be rotated accordingly on.
Guide for usage:
- Firstly, find your position on the map. Press F3 and jot down your X, Y & Z coordinates located on the left.
- Then type into the chat bar
/tp [target player] <x> <y> <z> [<y-rot> <x-rot>] replacing
<z> with your coordinates you wrote down.
- Then, change
<x-rot> with the angles you want.
Angles/Rotation Description from Commands page
Specifies the horizontal rotation (-180.0 for due north, -90.0 for due east, 0.0 for due south, 90.0 for due west, to 179.9 for just west of north, before wrapping back around to -180.0). Tilde notation can be used to specify a rotation relative to the target's previous rotation.
Specifies the vertical rotation (-90.0 for straight up to 90.0 for straight down). Tilde notation can be used to specify a rotation relative to the target's previous rotation.
As for when the player spawns, if you are using Bukkit for the setspawn command, using plugins like this automatically make the facing direction wherever you were looking when you executed the setspawn command.
If not, put a pressure plate down on the spawn block, a command block under that and teleport the nearest player wherever you want (a good suggestion again from QbsidianH20 would be a fake spawn), by inputting the below command into the command block:
/tp @p [x=0,y=0,z=0,r=0] tp coordinates
Where the values x, y, z define the center of the search (the player nearest to these coordinates would get teleported) and r defines the radius of the search. If you don't want to limit the radius omit r.
Do not use decimal values for the search center, this will not work.
- Excerpt from this Arqade question.