Když se díváme na nějaký objekt, naše oko vnímá světlo odražené od tohoto objektu a mozek nám v hlavě vyrobí jeho obraz. Zjednodušeně můžeme říci, že z každého bodu objektu, který vidíme, letí paprsek světla do našeho oka. Představte si, že naše krychle je kdesi za monitorem a my se na ní díváme skrze monitor. Z každého bodu krychle letí tedy do našeho oka paprsek, který se někde protíná s obrazovkou monitoru. Za monitorem ale žádná krychle není a my chceme na obrazovku nakreslit jako by tam byla. Zvolíme nějaký pevný bod před obrazovkou, kde budeme předpokládat, že je oko pozorovatele. Pak vezmeme naší hypotetickou krychli za monitorem a z každého vrcholu (který vidíme) hypotetické krychle vyšleme paprsek do tohoto pevného bodu. Následně spočítáme, kde se ony paprsky protnou s obrazovkou. Tyto průniky potom udávají, kam nakreslit jednotlivé vrcholy na obrazovku. Pak již stačí spojit body odpovídající jednotlivým stěnám a vzniklé čtyřúhelníky vybarvit barvou krychle.
Lépe je to vidět na následujících obrázcích. Červený bod představuje oko pozorovatele, zelená poloprůhledná plocha obrazovku a žluté přímky paprsky směřující z vrcholů do oka.
|  |  | 
Pokud si chcete vidět tuto situaci i z jiných směrů, stačí použít tento skript pro program Octave (pozor je nutno mít nainstalované rozšíření Octaviz).
Nyní si tedy můžeme vysvětlit, jak budeme promítat jednotlivé body v 3D prostoru do 2D prostoru. Řekněme, že oko pozorovatele
umístíme do bodu  . Obrazovku monitoru umístíme do roviny dané rovnicí
. Obrazovku monitoru umístíme do roviny dané rovnicí  , tj. roviny sestávající se z bodů
, tj. roviny sestávající se z bodů
 pro všechny
 pro všechny 
 . Protože naše krychle zadaná maticí points má bod
. Protože naše krychle zadaná maticí points má bod  ve svém středu, musíme
krychli posunout tak, aby byla za obrazovkou. Tento posun je zadán vektorem shift
 ve svém středu, musíme
krychli posunout tak, aby byla za obrazovkou. Tento posun je zadán vektorem shift  . Vezměme libovolný vrchol
naší krychle
. Vezměme libovolný vrchol
naší krychle 
 , který chceme promítnout na obrazovku. Posuneme ho pomocí vektoru shift, tj. dostaneme
vektor shift +
, který chceme promítnout na obrazovku. Posuneme ho pomocí vektoru shift, tj. dostaneme
vektor shift +
 . Paprsek směřující z tohoto vrcholu do oka pozorovatele
si můžeme představit jako přímku, která prochází bodem
. Paprsek směřující z tohoto vrcholu do oka pozorovatele
si můžeme představit jako přímku, která prochází bodem  a má
směrový vektor
 a má
směrový vektor 
 . Pokud chceme najít bod, kde se tato přímka protíná s obrazovkou, stačí tento
vektor vynásobit vhodným skalárem tak, aby výsledný vektor byl tvaru
. Pokud chceme najít bod, kde se tato přímka protíná s obrazovkou, stačí tento
vektor vynásobit vhodným skalárem tak, aby výsledný vektor byl tvaru  . Takový skalár je zřejmě
. Takový skalár je zřejmě  .
Bod průniku tedy je
.
Bod průniku tedy je 
 . Souřadnice na obrazovce tedy jsou
. Souřadnice na obrazovce tedy jsou 
 .
Nakonec musíme z těchto souřadnic vyrobit nějaká smysluplná čísla v pixelech. Nejprve souřadnice vynásobíme vhodným
měřítkem scale, aby byla naše krychle dostatečně velká v poměru k velikosti našeho <canvas> tagu.
Následně souřadnice posuneme tak, aby bod
.
Nakonec musíme z těchto souřadnic vyrobit nějaká smysluplná čísla v pixelech. Nejprve souřadnice vynásobíme vhodným
měřítkem scale, aby byla naše krychle dostatečně velká v poměru k velikosti našeho <canvas> tagu.
Následně souřadnice posuneme tak, aby bod  byl ve středu našeho <canvas> tagu. Výše uvedený postup je zachycen
ve funkci perpective_projection:
 byl ve středu našeho <canvas> tagu. Výše uvedený postup je zachycen
ve funkci perpective_projection:
    function perspective_projection(v) {
      var output = [0,0];
      v = v.add(shift);   // posun od pozorovatele.
      output[0] = scale * (v.e(1)/v.e(3)) + x_center;     // vypocet perspektivni projekce
      output[1] = scale * (-v.e(2)/v.e(3)) + y_center;
      
      return(output);
    };
Rostislav Horcik 2009-01-04