Shading with Dot Product
eharetea

A mathematical and visual look at the Dot Product in regards to shading.

The math behind computer graphics.

Date Created:Friday December 29th, 2006 03:41 AM
Date Modified:Friday August 01st, 2008 02:26 AM

Shading with Dot Product - test.3daet.com

Shading with Dot Product - test.3daet.com

Shading with Dot Product

//more math to explain the dot product

L is the Vector from the point on the surface(Ps) to the light source(P), hence L = P-Ps.
Ln is L normalized.

N is the Shading normal for the surface.
Nn is N normalized.

Light is at (1,5,0)
Point is at (0,0,0)

P  = (1,5,0)
Ps = (0,0,0)

//calculate the vector of the light to the point by subrating the two points
L = P-Ps
L  = (1,5,0)

//calculate the distance of the two points:
distance(P,Ps) = sqrt( (P.x-Ps.x)^2 + (P.y-Ps.y)^2 )
distance(P,Ps) = sqrt( 1^2 + 5^2 )
distance(P,Ps) = sqrt(26)

//normalize L by dividing each component by the distance of the vector L
Ln = ( 1/sqrt(26), 5/sqrt(26) , 0 )
Ln = ( 0.196116, 0.980581, 0 )

N = ( 1, 1, 0 ) 
//calculate length of N, subtracting the origin from the vector
length(N) = sqrt( (1-0)^2 + (1-0)^2 )
length(N) = sqrt(2)
length(N) = 1.41421

//normalize N
Nn = ( 1/1.41421, 1/1.41421, 0)
Nn = ( 0.707, 0,707, 0 )

//take the dot product of Ln and Nn

dot(Ln,Nn) = ( (Ln.x)(Nn.x) + (Ln.y)(Nn.y) ) 
dot(Ln,Nn) = ( (0.196116)(0.707) + (0.980581)(0.707) )
dot(Ln,Nn) =  0.83205

//the dot product is equal to the cosine of the angle inbetween the vectors
dot(Ln,Nn) = cos@

//the angle is between the vectors is equal to the arccosine of the dot product
@ = acos( dot(Ln,Nn) )

SHADING THE SURFACE!
@ = 33.6901 
33.6901 degrees away from being at a 0 degree angle from the light
if it was directly lined up, the dot product would return 0, hence the cos(0) is 1

the dot product returns the percentage that the light will shade the surface!

dot(Ln,Nn) = 0.83205 = 83% shading from light