> Could someone please explain how to calculate the surface normal for any
> arbitrary point on a Bezier Surface?
> I'm trying to understand Bicubic Bezier Surfaces as described in the
> Gamasutra article: http://www.gamasutra.com/features/19991027/deloura_01.htm
I have not read the gamasutra article, but ...
This is very simple. I will first discuss 2D: a point on a bezier
curve is found as
v = B(t), t in 0,1
B(t) = [ t^3 t^2 t 1 ] * Bb * G, Bb : Bezier basis matrix.
Gg : Geometry matrix
The first derivative (tangent slope) at B(t) is then:
B'(t) = [ 3t^2 2t 1 0 ] *Bb
Now, a point on a bezier surface is only slightly more difficult:
v = B(s,t), s and t in 0,1
B(s,t) = [ t^3 t^2 t^1 1 ] * Bb * G * [ s^3 s^2 s^1 1 ](transpose)
[Here G is a 3D matrix, ie. one for each component of v.]
Now apply the first derivative of the t and s vectors and voila you have
the slope of the tangents in the s and t direction.
The cross product of the tangent vectors is the normal.