Point - P(x, y, z), a location in space. 0-dimensional object in
the 3D space. In OpenGL a point can be drawn with
glBegin(GL_POINTS);
glVertexf(x, y, z); // as many as we need
glEnd();
Vector - V(x, y, z), a combination of a direction and a magnitude. A vector does not have a fixed position in space. The usual representation for some physical quantities like velocity, force.
Parametric Curves
Def. P(x(s), y(s), z(s)), a < s
< b. Usually a=0, b=1.
Notation: P(x(s), y(s), z(s)) = P(s).
1-dimensional object in the 3D space depending on one parameter s.
Examples:
Line segment | from (x_{1}, y_{1}, z_{1}) to (x_{2}, y_{2}, z_{2}) | x(s) = (1-s) x_{1} + s x_{2} y(s) = (1-s) y_{1} + s y_{2} z(s) = (1-s) z_{1} + s z_{2} 0 < s < 1 |
Circle in the Oxy plane |
x ^{2} + y^{2} = r^{2}
z=0 |
x(s) = r cos s y(s) = r sin s z(s) = 0 0 < s < 2 pi |
Spiral in the Oxy plane | General equation: x^{2} + y^{2} = (r(s))^{2}, z=0 |
x(s) = c s cos s y(s) = c s sin s z(s) = 0 0 < s < 5 pi |
Helix |
x ^{2} + z^{2} = r^{2}
0 < y < 3 r |
x(s) = r cos s y(s) = r s / (2 pi) z(s) = r sin s 0 < s < 6 pi |
x(s) = 0 y(s) = (2 - cos s) cos s z(s) = 2 sin s 0 < s < 2 pi |
Parametric Surfaces
Def. P(x(s, t), y(s, t), z(s, t)), a <
s < b, c <
t < d.
2-dimensional objects in the 3D space depending on two parameters s and t.
Examples:
Triangle |
A_{1}(x_{1}, y_{1}, z_{1}) , A_{2}(x_{2}, y_{2}, z_{2}), A_{3}(x_{3}, y_{3}, z_{3}) |
x(s, t) = (1-t)((1-s) x_{1} + s x_{2}) + t x_{3}
y(s, t) = (1-t)((1-s) y_{1} + s y_{2}) + t y_{3} z(s, t) = (1-t)((1-s) z_{1} + s z_{2}) + t z_{3} 0 < s < 1, 0 < t < 1 |
Ellipsoid |
(x/a) ^{2} + (y/b)^{2} + (z/c)^{2} = 1 | x(s) = a cos s cos t y(s) = b sin s cos t z(s) = c sin t 0 < s < 2 pi, 0 < t < 2 pi |
Cylinder |
x ^{2} + y^{2} = r^{2}
0 < z < a |
x(s, t) = r cos s y(s, t) = r sin s z(s, t) = t 0 < s < 2 pi, 0 < t < a |
Cone |
x ^{2} + y^{2} = (1 - z)^{2}
0 < z < 1 |
x(s, t) = (1 - t) cos s y(s, t) = (1 - t) sin s z(s, t) = t 0 < s < 2 pi, 0 < t < 1 |
Rotation surface |
Given a planar curve (x_{1}, y_{1}) construct the rotation |
(x_{1}(s), y_{1}(s))
x(s, t) = x_{1}(s) cos t |
Solid objects
Def. P(x(s, t, u), y(s, t, u), z(s, t, u)), a <
s < b, c <
t < d, e <
u < f;
3-dimensional objects in the 3D space depending on three parameters s, t,
and u;
In CG they are represented by the bounding surface which is closed.
Sometimes we need to visualize the whole volume, like for medical images.
Discretizing curves.
Consider the curve x(s), y(s), z(s), a <
s < b.
We want to draw the curve as a number of nlines line segments.
step = (b - a) / nlines;
for (i=0; i<nlines; i++) {
s1 = a + i * step;
s2 = a + (i+1) * step;
Line3D(x(s1), y(s1), z(s1),
x(s2), y(s2), z(s2));
}
In OpenGL: represent the curve as a line strip.
step = (b - a) / nlines;
glBegin(GL_LINE_STRIP);
for (i=0; i<=nlines; i++) {
s = a + i * step;
glVertex3f((x(s), y(s), z(s));
}
glEnd();
Discretizing surfaces.
Consider the surface x(s, t), y(s, t), z(s, t), a <
s < b, c <
t < d.
We want to discretize it using spoints along s and tpoints
along t.
point(s, t) : x(s, t), y(s, t), z(s, t).
sstep = (b - a) / spoints;
tstep = (d - c) / tpoints;
for (i=0; i<spoints; i++) {
s1 = a + i * sstep;
s2 = a + (i+1) * sstep;
for (j=0; j<tpoints; j++) {
t1 = c + j * tstep;
t2 = c + (j+1) * tstep;
// First model
Polygon(point(s1, t1),
point(s1, t2),
point(s2, t2), point(s2, t1),
point(s1, t1));
// Second model
Triangle(point(s1, t1),
point(s1, t2), point(s2, t1));
Triangle(point(s1, t2),
point(s2, t1), point(s2, t2));
}
If the triangle or the polygon is drawn as a collection of lines, we have wireframe models.
In OpenGL: represent each band in the surface for given s1 and s2
as a triangle strip.
sstep = (b - a) / spoints;
tstep = (d - c) / tpoints;
for (i=0; i<spoints; i++) {
s1 = a + i * sstep;
s2 = a + (i+1) * sstep;
glBegin(GL_TSTRIP);
for (j=0; j<=tpoints; j++) {
t = c + j * tstep;
glVertex3f(x(s1,t), y(s1,t),
z(s1,t));
glVertex3f(x(s2,t), y(s2,t),
z(s2,t));
}
glEnd();
}