Quote:> 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.

m