C# 199 197197 196 bytes
string f(int n){boolvar u=n<0;int m=u?-n:n;string a="",b=" O ";for(;m-->0;)b+="\n/ \\\n\\ /\n "+(m==0?"O ":u?"\\ ":"/ ");for(;++m<3;)a+=string.Concat(b.Split('\n').Select(s=>s[m]))+"\n";return u?b:a;} Ungolfed version:
string f(int n) { boolvar u = n < 0; int m = u ? -n : n; string a = "", b = " O "; for (; m-- > 0; ) b += "\n/ \\\n\\ /\n " + (m == 0 ? "O " : u ? "\\ " : "/ "); for (; ++m < 3;) a += string.Concat(b.Split('\n').Select(s => s[m])) + "\n"; return u ? b : a; } The idea is to build the horizontal display from the vertical display by rendering the transposed matrix of characters.