Said L the incoming ray (at a point $P$). $R$ is the reflected ray. $N$ is the normal to the surface at the point $P$. $\alpha$ is the angle between $N$ and $L$ (and $N$ and $R$ also). It is assumed a smooth surface (like a plane). $P_{R1}$ is the projection of the vector $R$ on the plane. $R_2$ is the vector that joins the vector $R$ and $P_{R1}$. Now you have,

$R= P_{R1} + R_2$ (sum of vectors)

$P_{R1} = -L+R_2$

Thus: $R=2R_2-L$

Now, exploiting the property of dot product (namely scalar product)

$R_2 = (N\cdot L)/|N|$ (because $R_2$ is $L\cos(\alpha)$ because is the projection of $L$ on $N$)

where $N\cdot L$ is the dot product and $|N|$ is the magnitude (the module) of vector $N$. But the vector $N$ is the normal that typically has $|N|=1$ Thus:

$R = 2(N\cdot L)-L$

But my book (3D Computer Graphics, Alan Watt) tells that:

$R_2 = (N\cdot L)N$

Rather for me is:

$R_2=(N\cdot L)/|N| = N\cdot L$ (because $|N|=1$)

I don't understand this point.

  • 1
    $\begingroup$ If R2 is a vector, it can't be equal to NL which is a scalar. $\endgroup$
    – Simon F
    Aug 24 '16 at 14:51

$N \cdot L$ is the scalar length of the projection of $L$ on $N$ (assuming $|N|=1$).

$(N \cdot L)N$ is the actual vector with the length of $N \cdot L$ in the direction of $N$.

There is often a confusion when people say "projection of this on that" whether they mean just its length, or the actual vector resulting from the projection. In this case you want to combine it with another vector, so you need the vector version. The correct reflection formula is thus: $$R = 2(N \cdot L)N - L$$

  • $\begingroup$ Right. Basically I wrote the module instead of the vector. Thank you $\endgroup$
    – Umbert
    Aug 25 '16 at 20:41

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.