Each pair of u, v uniquely corresponds to a point on the surface. We define the pattern as m (u, v) value = "color" so each point in pattern corresponds to a point on the object. The pattern can be a rectangular function but the object can be any shape that can be parametrically defined. (General discussion of 2D Texture Domain texture mapping).
First method (Forward Pixel Mapping)
go through parameters with small steps in u, v
for each u, v pair
get mapping color <= m (u, v)
compute x, y, z <= f (u, v)
project x, y, z onto screen and set pixel to color m (u, v)
Problem: what is good step size?
If it is too large in u, v, then it will skip pixels in PDC.
If it is too small in u, v, then it will be recomputing many pixels in PDC.
If it is too small in u, v, then we will have aliasing problem since we will recompute color but resultant color will only be last one computed but should be an average of all pattern values that map onto pixel.
Second method - reverse of the first method (called inverse pixel mapping)
go through pixels on the screen
for each pixel (on the surface), compute x, y, z => u, v
then set pixel color <= m (u, v)
Problem: sampling the map only at pixel centers causes aliasing i.e. Two adjacent pixel centers corresponding to widely separated areas on map correspond to sharp boundaries with intermediate regions skipped.A better method is do not compute point u, v in map corresponding to x, y, z of pixel centers but compute area in u, v range covered by pixel.
Another problem is finding u, v given x, y. For a simple surface (e.g., sphere, torus) with x = X(u, v), etc. u,
v can be expressed in closed form (analytical solution) and computed. For a general surface we may not
have closed form, so we must use iteration method
(e.g. Newton - Raphson) to solve system of 2 non-linear equations ¬
If surfaces are defined as parametric bicubic patches, e.g. Bezier or B-Spline
then we can use cheaper method like surface subdivision (amounts to replacing
original grid of control points with sets of finer points until only cover a
pixel ¾ more later)
Look at example of mapping bit map onto a portion of sphere
HyperGraph home page