Primitive: Soft object [Wyvill et al.
1986]
Definition: Sum f(r)
f(r) = 1 - 22r^2/9d^2 + 17r^4/9d^4 - 4r^6/9d^6
r - distance to the given point
Call: hfSoft(x,x0,y0,z0,d,T);
Parameters:
x - point coordinates
x0,y0,z0 - arrays of blob centers
d - array of d - radii of influence
T - threshold value
Test file: soft.hf
Primitive: Convolution with set of skeleton points
Definition: Sum f(r)
f(r) = 1 / (1 + S^2*r^2)^2, Cauchy kernel [McCormack and
Sherstyuk 1998]
r - distance to a skeleton point
Call: hfConvPoint(x,vect,S,T);
Parameters:
x - point coordinates
vect - array of skeleton points' coordinates
S - array of kernel width control parameters for each point
T - threshold
Test file: convpoint.hf
Primitive: Convolution with set of skeleton line segments
Definition: Sum f(x)
f(x) is analytical convolution for a segment with Cauchy kernel [McCormack and
Sherstyuk 1998]
Call: hfConvLine(x,begin,end,S,T);
Parameters:
x - point coordinates
begin - starting points coordinate array for line segments
end - ending points coordinate array for line segments
S - array of kernel width control parameters for each line segment
T - threshold
Test file: convline.hf
Primitive: Convolution with set of skeleton arcs
Definition: Sum f(x)
f(x) is analytical convolution for an arc with Cauchy kernel [McCormack and
Sherstyuk 1998]
Call: hfConvArc(x,center,radius,theta,axis,angle,S,T);
Parameters:
x - point coordinates
center - coordinate array for centers of arcs
radius - array of arcs' radii
theta - array of arcs' angles (from positive x-axis counter-clockwise, 360
for full circle)
axis - array of vectors defining axis of rotation for each arc (placed on
local xy-plane)
angle - angles of rotation for arcs around axis of rotation
S - array of kernel width control parameters for each arc
T - threshold
Test file: convarc.hf
Primitive: Convolution with set of triangles
Definition: Sum f(x)
f(x) is analytical convolution for a triangle with Cauchy kernel [McCormack and
Sherstyuk 1998]
Call: hfConvTriangle(x,vect,S,T);
Parameters:
x - point coordinates
vect - coordinate array for vertices of triangles (9 elements for each)
S - array of kernel width control parameters for each triangle
T - threshold
Test file: convtri.hf
Primitive: Convolution with curve (set of connected skeleton line segments)
Definition: Sum f(x)
f(x) is analytical convolution for a segment with Cauchy kernel [McCormack and
Sherstyuk 1998]
Call: hfConvCurve(x,vect,S,T);
Parameters:
x - point coordinates
vect - coordinate array for vertices of curve
S - array of kernel width control parameters for each line segment
T - threshold
Test file: convcurve.hf
Primitive: Convolution with mesh (set of connected triangles)
Definition: Sum f(x)
f(x) is analytical convolution for a triangle with Cauchy kernel [McCormack and
Sherstyuk 1998]
Call: hfConvMesh(x,vect,tri,S,T);
Parameters:
x - point coordinates
vect - coordinate array for vertices
tri - index array of vertices for triangles (3 elements each)
S - array of kernel width control parameters for each triangle
T - threshold
Test file: convmesh.hf
Primitive: Solid noise
Definition: Series(x)*Series(y)*Series(z) with Gardner's series [Gardner
1984]
Call: hfNoiseG(x,amp,freq,phase);
Parameters:
x - point coordinates array
amp - noise amplitude
freq - noise frequency
phase - phase for sin() in the series
Test file: noiseg.hf
Primitive: Cubic B-spline object [Schmitt et al. 2000]
Definition: Object defined by F>=0, where F is a B-spline function of three variables
F(u,v,w) = Sum Sum Sum N_i(u)N_j(v)N_k(w)P_ijk
P_ijk - Control points of the cubic B-spline volume. Only the fourth coordinnate is used
Sum Sum Sum - triple sum with the 3 indeces i,j,k starting from 0 to l*n*m
N_i(u) : Cubic BSpline blending function.
Call: hfCubicBSplineF(x,l,m,n,bbox,ctr_pts);
Parameters:
x - point coordinates
l,m,n - number of control points on each axis
bbox - array defining the bounding box of the object
ctr_pts - array of value of each control points
Test file: bsplinef.hf
Primitive: Bézier spline object [Schmitt, Pasko, and Savchenko 1999]
Definition: Object defined by F>=0, where F is a Bezier spline function of three variables
F(u,v,w) = Sum Sum Sum B_i(u)B_j(v)B_k(w)P_ijk
P_ijk - Control points of the Bézier volume. Only the fourth coordinnate is used
Sum Sum Sum - triple sum with the 3 indeces i,j,k starting from 0 to l*n*m
Call: hfBezierSplineF(x,l,m,n,bbox,ctr_pts);
Parameters:
x - point coordinates
l,m,n - number of control points on each axis
bbox - array defining the bounding box of the object
ctr_pts - array of value of each control points
Test file: bezierf.hf
Transformation: Blending Union [Pasko and Savchenko
1994]
Definition: R_uni(f1,f2) + disp(f1,f2,a0,a1,a2)
disp(f1,f2,a0,a1,a2)=a0/(1+(f1/a1)^2+(f2/a2)^2)
Call: hfBlendUni(f1,f2,a0,a1,a2);
Parameters:
f1,f2 - two objects
a0,a1,a2 - blend parameters
Test file: blend.hf
Transformation: Blending Intersection [Pasko and Savchenko
1994]
Definition: R_int(f1,f2) + disp(f1,f2,a0,a1,a2)
disp(f1,f2,a0,a1,a2)=a0/(1+(f1/a1)^2+(f2/a2)^2)
Call: hfBlendInt(f1,f2,a0,a1,a2);
Parameters:
f1,f2 - two objects
a0,a1,a2 - blend parameters
Test file: blend.hf
Transformation: Scale in 3D space
Definition: x'=sx*x
Call: hfScale3D(xt,sx,sy,sz);
Parameters:
xt - point coordinates array to be changed
sx,sy,sz - scaling factors along axes
Test file: scale.hf
Transformation: Shift in 3D space
Definition: x'=x+dx
Call: hfShift3D(xt,dx,dy,dz);
Parameters:
xt - point coordinates array to be changed
dx,dy,dz - scaling factors along axes
Test file: shift.hf
Transformation: Rotation in 3D around z-axis
Definition: inverse mapping
x'=x*cos(theta)+y*sin(theta)
y'=-x*sin(theta)+y*cos(theta)
Call: hfRotate3DZ(xt,theta);
Parameters:
xt - point coordinates array to be changed
theta - rotation angle in radians
Test file: rotate.hf
Transformation: Rotation in 3D around y-axis
Definition: inverse mapping
z'=z*cos(theta)+x*sin(theta)
x'=-z*sin(theta)+x*cos(theta)
Call: hfRotate3DY(xt,theta);
Parameters:
xt - point coordinates array to be changed
theta - rotation angle in radians
Test file: rotate.hf
Transformation: Rotation in 3D around x-axis
Definition: inverse mapping
y'=y*cos(theta)+z*sin(theta)
z'=-y*sin(theta)+z*cos(theta)
Call: hfRotate3DX(xt,theta);
Parameters:
xt - point coordinates array to be changed
theta - rotation angle in radians
Test file: rotate.hf
Transformation: Twisting around z-axis
Definition: inverse mapping
t = (z-z1)/(z2-z1)
theta = (1-t)*theta1 + t*theta2
x'=x*cos(theta)+y*sin(theta)
y'=-x*sin(theta)+y*cos(theta)
Call: hfTwistZ(xt,z1,z2,theta1,theta2);
Parameters:
xt - point coordinates array to be changed
z1, z2 - end points of z-interval
theta1, theta2 - rotation angles in radians for end points
Test file: twist.hf
Transformation: Twisting around y-axis
Definition: inverse mapping
t = (y-y1)/(y2-y1)
theta = (1-t)*theta1 + t*theta2
z'=z*cos(theta)+x*sin(theta)
x'=-z*sin(theta)+x*cos(theta)
Call: hfTwistY(xt,y1,y2,theta1,theta2);
Parameters:
xt - point coordinates array to be changed
y1, y2 - end points of y-interval
theta1, theta2 - rotation angles in radians for end points
Test file: twist.hf
Transformation: Twisting around x-axis
Definition: inverse mapping
t = (x-x1)/(x2-x1)
theta = (1-t)*theta1 + t*theta2
y'=y*cos(theta)+z*sin(theta)
z'=-y*sin(theta)+z*cos(theta)
Call: hfTwistX(xt,x1,x2,theta1,theta2);
Parameters:
xt - point coordinates array to be changed
x1, x2 - end points of x-interval
theta1, theta2 - rotation angles in radians for end points
Test file: twist.hf
Transformation: Stretching in 3D space
Definition: x'=x0+(x-x0)/scale (inverse mapping)
Call: hfSTretch3D(xt,x0,sx,sy,sz);
Parameters:
xt - point coordinates array to be changed
x0 - reference point for stretching
sx,sy,sz - scaling factors along axes
Test file: stretch.hf
Transformation: Tapering along z-axis
Definition: inverse mapping
z1<= z <= z2
t = (z-z1)/(z2-z1)
scale = (1-t)*s1 + t*s2
x'=x/scale
y'=y/scale
z < z1 scale = s1
z > z2 scale = s2
Call: hfTaperZ(xt,z1,z2,s1,s2);
Parameters:
xt - point coordinates array to be changed
z1, z2 - end points of z-interval, z2 > z1
s1, s2 - scaling factors for end points
Test file: taper.hf
Transformation: Tapering along x-axis
Definition: inverse mapping
x1<= x <= x2
t = (x-x1)/(x2-x1)
scale = (1-t)*s1 + t*s2
y'=y/scale
z'=z/scale
x < x1 scale = s1
x > x2 scale = s2
Call: hfTaperX(xt,x1,x2,s1,s2);
Parameters:
xt - point coordinates array to be changed
x1, x2 - end points of x-interval, x2 > x1
s1, s2 - scaling factors for end points
Test file: taper.hf
Transformation: Tapering along y-axis
Definition: inverse mapping
y1<= y <= y2
t = (y-y1)/(y2-y1)
scale = (1-t)*s1 + t*s2
z'=z/scale
x'=x/scale
y < y1 scale = s1
y > y2 scale = s2
Call: hfTaperY(xt,y1,y2,s1,s2);
Parameters:
xt - point coordinates array to be changed
y1, y2 - end points of y-interval, y2 > y1
s1, s2 - scaling factors for end points
Test file: taper.hf
Transformation: Cubic space mapping
Definition: Space mapping (deformation) controlled by moving arbitrary points in space.
Inverse Mapping:
x' = x - Sum[ (delta_xi) * (1-vi)^3 / (1+vi)]
y' = y - Sum[ (delta_yi) * (1-vi)^3 / (1+vi)]
z' = z - Sum[ (delta_zi) * (1-vi)^3 / (1+vi)]
vi - ((x-xai)^2+(y-yai)^2+(z-zai)^2)/b^2.
(x,y,z)ai - x,y,z coordinnates of the ith moved point
Call: hfSpaceMapCubic(xt,original_points,delta_points,b);
Parameters:
xt - point coordinates array to be changed
original_points - Array of moved control points
delta_points - Array of values for the displacements of the moved points
b - parameter determining the incluence of the mapping
Test file: spacemap.hf
References
[Blinn 1982] Blinn J., A generalization of algebraic surface drawing, ACM Transactions
on Graphics, vol. 1, No. 3, 1982, pp. 135-256.
[Gardner 1984] Gardner G., Simulation of natural scenes using
textured quadric surfaces, SIGGRAPH'84, Computer Graphics vol. 18, July 1984,
pp.11-20.
[McCormack and Sherstyuk 1998] McCormack
J. and Sherstyuk A., Creating and rendering convolution surfaces, Computer
Graphics Forum, vol. 17, No. 2, 1998, pp. 113-120.
[Nishimura et al. 1985] Nishimura H., Hirai M., Kawai T., Kawata T.,
Shirakawa I., Omura K., Object modeling by distributed function and a method of
image generation, Transactions of IECE of Japan, vol. J68-D, No. 4, 1985, pp.
718-725 (in Japanese)
[Pasko and Savchenko 1994] Pasko
A. and Savchenko V., Blending operations for the functionally based constructive
geometry, Set-theoretic Solid Modeling: Techniques and Applications, CSG 94
Conference Proceedings, Information Geometers, Winchester, UK, 1994, pp.151-161.
[Schmitt et al. 2000]
Schmitt B., Kazakov M., Pasko A., Savchenko V., Volume sculpting with 4D spline volumes, CISST'2000, Las
Vegas, Ed. Hamid Arabnia,
CSREA Press, vol. II, ISBN 1-892512-54-8, 2000, pp 475-483.
[Schmitt, Pasko, and Savchenko 99]
Schmitt B., Pasko A., Savchenko V., Extended space mapping with Bezier patches and volumes,
Implicit Surfaces '99, Eurographics/ACM SIGGRAPH Workshop (Bordeaux, France, September 13-15 1999),
J. Hughes and C. Schlick (Eds.), pp. 25-31.
[Wyvill et al. 1986] Wyvill G., McPheeters C., Wyvill
B., Data structure for soft objects, The Visual Computer, vol. 2, No. 4, 1986,
pp. 227-234.