Perspective

R[u_,v_]:=(({{Cos[u], -Sin[u] Sin[v], -Cos[v] Sin[u]}, {0, Cos[v], -Sin[v]}, {Sin[u], Cos[u] Sin[v], Cos[u] Cos[v]}}));
vp={0,-5,0};
Manipulate[
{p[0],p[1],p[2],p[3],p[4],p[5],p[6],p[7]}={{-1,-1,-1},{1,-1,-1},{1,1,-1},{-1,1,-1},{-1,-1,1},{1,-1,1},{1,1,1},{-1,1,1}}.R[t,s];
For[i=0,i<7,i++,pp[i]=vp-((3+vp[[2]])/((p[i])[[2]]-vp[[2]]))*(p[i]-vp)];
Show[
Graphics3D[{
(*立方体*)
Polygon[{p[0],p[1],p[2],p[3],p[0]}],Polygon[{p[4],p[5],p[6],p[7],p[4]}],
Polygon[{p[1],p[2],p[6],p[5],p[1]}],Polygon[{p[0],p[3],p[7],p[4],p[0]}],
Polygon[{p[0],p[1],p[5],p[4],p[0]}],Polygon[{p[2],p[3],p[7],p[6],p[2]}],
(*立方体の投影像*)
Line[{pp[1],pp[0],pp[4],pp[5],pp[1],pp[2],pp[6],pp[5]}],
Line[{pp[0],pp[3],pp[2]}],
(*投影面の枠線*)
Line[{{-3,-3,-2},{-3,-3,2},{3,-3,2},{3,-3,-2},{-3,-3,-2}}],
(*視線*)
{Dashed,Line[{{vp,p[0]},{vp,p[1]},{vp,p[2]},{vp,p[3]},{vp,p[4]},{vp,p[5]},{vp,p[6]}}]},
(*視点*)
{PointSize[Large],Point[vp]},
Text["view point",vp+{0,0,0.2}]
},Boxed->False
],
ParametricPlot3D[{x,-3,z},{z,-2,2},{x,-3,3},Mesh->None,PlotStyle->Directive[LightBlue,Opacity[opa]]]
],
{{t,0.8,"立方体の回転角1"},0.3,1.25},{{s,1,"立方体の回転角2"},0.7,1.35},{{opa,0.5,"投影面の透明度"},0,1},SaveDefinitions->True
]

Orthogonal Projection

R[u_,v_]:=(({{Cos[u], -Sin[u] Sin[v], -Cos[v] Sin[u]}, {0, Cos[v], -Sin[v]}, {Sin[u], Cos[u] Sin[v], Cos[u] Cos[v]}}));
Manipulate[
{p[0],p[1],p[2],p[3],p[4],p[5],p[6],p[7]}={{-1,-1,-1},{1,-1,-1},{1,1,-1},{-1,1,-1},{-1,-1,1},{1,-1,1},{1,1,1},{-1,1,1}}.R[t,s];
vpinfty={0,-10,0};
For[i=0,i<8,i++,pp[i]={(p[i])[[1]],-3,(p[i])[[3]]}];
Show[
Graphics3D[{
(*立方体*)
Polygon[{p[0],p[1],p[2],p[3],p[0]}],Polygon[{p[4],p[5],p[6],p[7],p[4]}],
Polygon[{p[1],p[2],p[6],p[5],p[1]}],Polygon[{p[0],p[3],p[7],p[4],p[0]}],
Polygon[{p[0],p[1],p[5],p[4],p[0]}],Polygon[{p[2],p[3],p[7],p[6],p[2]}],
(*立方体の投影像*)
Line[{pp[1],pp[0],pp[4],pp[5],pp[1],pp[2],pp[6],pp[5]}],
Line[{pp[0],pp[3],pp[2]}],
(*投影面の枠線*)
Line[{{-3,-3,-2},{-3,-3,2},{3,-3,2},{3,-3,-2},{-3,-3,-2}}],
(*視線*)
{Dashed,Line[{{pp[0],p[0]},{pp[1],p[1]},{pp[2],p[2]},{pp[3],p[3]},{pp[4],p[4]},{pp[5],p[5]},{pp[6],p[6]}}]},
(*視点*)
{PointSize[Large],Point[vpinfty]},
Text["view point = ∞",vpinfty+{0,0,0.2}]
},Boxed->False],
ParametricPlot3D[{x,-3,z},{z,-2,2},{x,-3,3},Mesh->None,PlotStyle->Directive[LightBlue,Opacity[opa]]]
],
{{t,0.8,"立方体の回転角1"},0.25,1.3},{{s,1,"立方体の回転角2"},0.7,1.35},{{opa,0.5,"投影面の透明度"},0,1},SaveDefinitions->True
]