%%
%%  A DANTE-Edition example
%%
%%
%%  Copyright (C) 2011 Herbert Voss
%%
%%  It may be distributed and/or modified under the conditions
%%  of the LaTeX Project Public License, either version 1.3
%%  of this license or (at your option) any later version.
%%
%%  See http://www.latex-project.org/lppl.txt for details.
%%
%%
%% ====
% Show page(s) 1
%%
\documentclass[]{article}
\pagestyle{empty}
\setlength\textwidth{375.57637pt}
\setlength\parindent{0pt}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{pst-solides3d,pstricks-add}
% pour le dessin du point de vue
\def\PointEcran(#1,#2,#3)#4{% position du point sur l'ecran
\pstVerb{/xM #1 def /yM #2 def /zM #3 def
        /kC dE dup mul xM xE mul yM yE mul zM zE mul add add sub
          xV xE mul xM xE mul sub
          yV yE mul yM yE mul sub add
          zV zE mul zM zE mul sub add
          div def
        /x_E kC xV xM sub mul xM add def
        /y_E kC yV yM sub mul yM add def
        /z_E kC zV zM sub mul zM add def}%
\psPoint(x_E,y_E,z_E){#4}}

\begin{document}
\psset{lightsrc=10 20 30,viewpoint=50 30 20 rtp2xyz,Decran=35}
\begin{pspicture}(-5,-5.7)(10,7)
\definecolor{bleuciel}{rgb}{0.78,0.84,0.99}
\psSolid[object=cube,fillcolor=bleuciel,a=2,action=draw*]
\psSolid[object=grille,base=0 8 0 10,action=draw,linecolor=black!20]
\psSolid[object=grille,base=0 7 0 10,action=draw,RotY=90,linecolor=black!20](0,0,7)%
\psSolid[object=grille,base=0 8 0 7,action=draw,RotX=-90,linecolor=black!20](0,0,7)%
\psSolid[object=cube,fillcolor=bleuciel,a=1,action=draw*](0.5,0.5,0.5)%
\psSolid[object=grille,base=-1 1 -1 1,action=draw,linecolor=blue](0,0,1)%
\psSolid[object=grille,base=-1 1 -1 1,action=draw,RotY=90,linecolor=blue](1,0,0)%
\psSolid[object=grille,base=-1 1 -1 1,action=draw,RotX=-90,linecolor=blue](0,1,0)%
\axesIIID(1,1,1)(8,10,7)
\pstVerb{
 /dV 12 def % distance V
 /dE 6 def % distance �cran
 /Kc dV dE sub dV div def
 /Theta 60 def
 /Phi 30 def
 /xV dV Phi cos mul Theta  cos mul def
 /yV dV Phi cos mul Theta  sin mul def
 /zV dV Phi sin mul def
 /xE Kc xV mul def
 /yE Kc yV mul def
 /zE Kc zV mul def
}%
\psPoint(5,10,5){L}%
\psPoint(xV,yV,zV){V}\psPoint(xE,yE,zE){E}\psPoint(xV,yV,0){Vp}
% 5 distance ecran
%\psPoint(dE Theta  cos mul Phi cos div dE Theta  sin mul Phi cos div 0){Vq}
\psPoint(xV,0,0){Vx}\psPoint(0,yV,0){Vy}\psPoint(0,0,zV){Vz}\psdot(V)
{\psset{linestyle=dashed,linecolor=red}
\psline(V)(Vp)\psline(Vx)(Vp)\psline(Vy)(Vp)\psline(V)(Vz)\psline(V)(O)\psline(Vp)(O)}
\psSolid[object=grille,base=-5 5 -3 3,action=draw,RotX=-60,linecolor=red](xE,yE,zE)%
\psTransformPoint[RotX=-60](-5 -3 0)(xE,yE,zE){A}
\psTransformPoint[RotX=-60](-5 3 0)(xE,yE,zE){B}
\psTransformPoint[RotX=-60](5 3 0)(xE,yE,zE){C}
\psTransformPoint[RotX=-60](5 -3 0)(xE,yE,zE){D}
\pspolygon[fillcolor=yellow!50,fillstyle=solid,opacity=0.6](A)(B)(C)(D)
{\psset{linecolor=black!60,linewidth=0.2pt}
\PointEcran(1,1,1){S1}  \psPoint(1,1,1){s1}  \psline(s1)(S1)(V)
\PointEcran(1,1,-1){S2} \psPoint(1,1,-1){s2} \psline(s2)(S2)(V)
\PointEcran(-1,1,-1){S3}\psPoint(-1,1,-1){s3}\psline(s3)(S3)(V)
\PointEcran(-1,1,1){S4} \psPoint(-1,1,1){s4} \psline(s4)(S4)(V)
\PointEcran(1,-1,-1){S5}\psPoint(1,-1,-1){s5}\psline(s5)(S5)(V)
\PointEcran(1,-1,1){S6} \psPoint(1,-1,1){s6} \psline(s6)(S6)(V)
\PointEcran(-1,-1,1){S7}\psPoint(-1,-1,1){s7}\psline(s7)(S7)(V)}
%
\psset{solidmemory}
\psSolid[object=plan,definition=equation,args={[0 0 1 0]},
  base=-5 5 -3 3,RotX=-60,%   showBase,
  action=none,name=planbase]
%% here, we define the plantype object "Ecran"
\codejps{
 planbase
 dup xE yE zE planputorigine
 dup -180 rotateplan
 /Ecran exch def
}%
%% uncomment follow line to draw "Ecran"
%\psSolid[object=plan,args=Ecran,showBase,planmarks]
\psProjection[object=texte,plan=Ecran,fontsize=20,text=projection plane](-2,2)
\pspolygon[fillcolor=red!60,fillstyle=solid,opacity=0.6](S1)(S2)(S3)(S4)
\pspolygon[fillcolor=red!60,fillstyle=solid,opacity=0.6](S1)(S2)(S5)(S6)
\pspolygon[fillcolor=red!60,fillstyle=solid,opacity=0.6](S1)(S4)(S7)(S6)
\psdots(s1)(s2)(s3)(s4)(s5)(s6)(s7)(S1)(S2)(S3)(S4)(S5)(S6)(S7)
%
\psbrace[ref=lC](V)(E){Decran}
\uput[45](V){viewpoint}
\psdot(L)\uput[45](L){light source}
\end{pspicture}
\end{document}