Title: Graphical primitives
1Lecture 4
- Graphical primitives
- Rasterization algorithmic approach
- Rasterization geometric approach
- 2D discrete lines, triangles
- Discrete planes
- 3D discrete lines
- Meshes of triangles
- Graphical primitives in OpenGL
2Main elements of vector model
- Lines
- Polylines, polygons
- Curves
- Text
3Main elements of vector model
- Lines
- Polylines, polygons (simple, regular)
- Curves
- Text
4Main elements of vector model
- Lines
- Polylines, polygons (simple, regular)
- Curves
- Text
5Main elements of vector model
- Lines
- Polylines, polygons (simple, regular)
- Curves
- Text
6Main elements of vector model
- Lines
- Polylines, polygons (simple, regular)
- Curves
- are represented by their coordinates
- (x1,y1), (x2,y2), , (xn,yn)
- Coordinate system origin, orientation of the
axes, units
7Main elements of vector model
- Attributes
- Color
- Thickness
- Line Style
- Fill Style
- Text Font/Style
8Main elements of vector model
- Attributes
- Color
- Thickness
- Line Style
- Fill Style
- Text Font/Style
9Main elements of raster model
- Pixels/voxels
- pixel picture element
- voxel volume element
Represented as a bitmap
10Main elements of mixed model
- Lines, curves, text are rasterized
11Main elements of mixed model
- Lines, curves, text are rasterized
12Approaches to rasterization Algorithmic Approach
- Developing algorithms for the main geometrical
primitives - Line segment
- Circle
- Curve
- Filled area
13Approaches Algorithmic Approach. Deficiencies
- It is difficult to determine whether a pixel
belongs to an object
14Approaches Algorithmic Approach. Deficiencies
- It is difficult to determine the intersection
of two objects
15Approaches Algorithmic Approach. Deficiencies
- In some cases the quality of the picture is
not satisfactory
Algorithm
16Approaches Algorithmic Approach. Deficiencies
- In some cases the quality of the picture is
not satisfactory
17Approaches Algorithmic Approach. Deficiencies
- In some cases the quality of the picture is
not satisfactory
18Approaches Geometric Approach.
- Objectives of the Geometric Approach
- Developing a relevant discrete counterpart of the
analytical geometry (Discrete Analytical
Geometry). - Developing efficient algorithms for generation of
the basic primitives of the discrete analytical
geometry. - Advantages
- Makes up the deficiencies of the algorithmic
approach. - Exact arithmetic.
- Raising the computational efficiency of some
algorithms. - Data compression.
19Approaches Geometric Approach. Difficulties
The intersection of two discrete lines may be 0,
1, or infinitely many points.
20Approaches Geometric Approach. Difficulties
The objects have thickness.
21Approaches Geometric Approach. Difficulties
In 3D the things become much more complex. The
intersection of two planes is not a line. It may
be even a disconnected set.
22Basic Definitions. Coordinate Systems, Pixels,
Voxels
- Def. 2D Coordinate system Only the integer points
are included. - Pixels are unit squares centered about the
integer points. - Voxels are unit cubes centered about the integer
points.
23Basic Definitions. Discrete Adjacency
- Def. 2D adjacency Let P1 and P2 be two pixels.
They are - 8-adjacent, if they share a vertex or an edge
- 4-adjacent, if they share an edge.
- Remark 4-adjacent pixels are also 8-adjacent.
24Basic Definitions. Discrete Adjacency
- Def. 3D adjacency Let V1 and V2 be two voxels.
They are - 26-adjacent, if they share a vertex, an edge or a
side. - 18-adjacent, if they share an edge or a vertex.
- 6-adjacent, if they share a side.
- Remark The 6-adjacent voxels are also 18- and
26-adjacent and the 18-adjacent voxels are also
26-adjacent.
25Basic Definitions. 2D Lines
- Def. 2D arithmetic line L(a,b, µ,w) is a set of
pixels (x,y) satisfying the conditions - 0 ? ax by µ lt w
- w - arithmetical thickness
- µ - internal translation constant
26Basic Definitions. 2D Lines
- 0 ? ax by µ lt w
- 0 ? 3x - 5y lt 5
- x y x y
- ------- --------
- 0 0 8 4
- 1 0 9 5
- 2 1 10 6
- 3 1 11 6
- 4 2 12 7
- 5 3 13 7
- 6 3 14 8
- 7 4
27Basic Definitions. 2D Lines
- 0 ? 3x - 5y lt 5
- Let P 3x - 5y
- x y P x y P
- ---------- ----------
- 0 0 0 8 4 4
- 1 0 3 9 5 2
- 2 1 1 10 6 0
- 3 1 4 11 6 3
- 4 2 2 12 7 1
- 5 3 0 13 7 4
- 6 3 3 14 8 2
- 7 4 1
28Basic Definitions. Types of 2D Lines
- If wltmax(a, b) disconnected
- If wmax(a, b) naïve
- If wab standard
- If wgtab thick
29Basic Definitions. Types of 2D Lines
- If wltmax(a, b) disconnected
- If wmax(a, b) naïve
- If wab standard
- If wgtab thick
30Basic Definitions. Types of 2D Lines
- If wltmax(a, b) disconnected
- If wmax(a, b) naïve
- If wab standard
- If wgtab thick
31Basic Definitions. Types of 2D Lines
- If wltmax(a, b) disconnected
- If wmax(a, b) naïve
- If wab standard
- If wgtab thick
32Basic Definitions. Tunnels in 2D Lines
- A line L (a,b,µ,w) has an k-tunnel, if there
exist two k-adjacent pixels A and B, such that - axAbyAµlt0 and
- axBbyBµ?w
33Basic Definitions. Bresenham Line
- Bresenham line corresponding to the Euclidean
line - ax by c 0 is
- 0? ax by cw/2 lt w,
- where wmax(a, b)
34Discrete Triangles
- Problems
- Def. Let A, B, C be given.
- Border union of the Bresenham lines AB, BC, CA
- Interior All the integer points, belonging to
the Euclidean triangle ABC, which do not belong
to the border.
35Discrete Planes
- Def. Discrete plane P(a,b,c,µ,w) is a set of
voxels (x,y,z) satisfying the conditions - 0 ? ax by cz c lt w
- w - arithmetical thickness
- µ - internal translation constant
- Naïve plane
- wmax(a, b, c
- Standard plane
- wabc
36Discrete Planes
- Def. Discrete plane P(a,b,c,µ,w) is a set of
voxels (x,y,z) satisfying the conditions - 0 ? ax by cz c lt w
- w - arithmetical thickness
- µ - internal translation constant
- Naïve plane
- wmax(a, b, c
- Standard plane
- wabc
37Discrete Planes
- Def. A plane P has a k-tunnel (n6,18,26) if
there exist two k-adjacent voxels A and B such
that - axA byA czA µ lt0
- and
- axB byB czB µ ? w
- Tunnel-free is equivalent to 26-tunnel-free.
38Functionality
- Def. A plane P is functional on a coordinate
plane, e.g. Oxy, if for any voxel (x,y) from Oxy
there is exactly one voxel belonging to P. The
plane Oxy is called functional coordinate plane
for P.
393D Lines
- Def. A 3D discrete line is defined as an
intersection of two discrete planes. - 0 ? - cx az µ lt w
- 0 ? - cy bz µ lt w
40Graphical Primitives in OpenGL
- OpenGL uses primitives to draw all the vector
primitives that we studied points, lines,
polygons, rectangles, etc. - 2D and 3D
- Remark For 3D primitives we have to call
projection function, e.g. glOrtho as in the
example of drawing triangle. - All functions for drawing primitives start with
- glBegin( PRIMITIVE_NAME ) and end with
- glEnd().
41Graphical Primitives in OpenGL
- Example The following fragment draws one 3D
point. - glBegin( GL_POINTS )
- glVertex3f( 0.2, 0.4, 0.3 )
- glEnd()
- Example The following fragment draws four 3D
point. - glBegin( GL_POINTS )
- glVertex3f( 0.1, 0.1, 0 )
- glVertex3f( 0.1, 0.5, 0 )
- glVertex3f( 0.5, 0.5, 0 )
- glVertex3f( 0.5, 0.1, 0 )
- glEnd()
42Graphical Primitives in OpenGL
- Example The following fragment draws a square.
- glColor3f( 1.0, 0.0, 0.0 )
- glBegin( GL_POLYGON )
- glVertex3f( 0.1, 0.1, 0 )
- glVertex3f( 0.1, 0.5, 0 )
- glVertex3f( 0.5, 0.5, 0 )
- glVertex3f( 0.5, 0.1, 0 )
- glEnd()
43Graphical Primitives in OpenGL
- Z-coordinate is zero. We can skip it.
- glColor3f( 1.0, 0.0, 0.0 )
- glBegin( GL_POLYGON )
- glVertex2f( 0.1, 0.1 )
- glVertex2f( 0.1, 0.5 )
- glVertex2f( 0.5, 0.5 )
- glVertex2f( 0.5, 0.1 )
- glEnd()
44Graphical Primitives in OpenGL
- Remark the order of the vertices is important.
- The program that we considered will draw the
following window
My first OpenGL program
45Graphical Primitives in OpenGL
- Remark the order of the vertices is important.
- The program
- glColor3f( 1.0, 0.0, 0.0 )
- glBegin( GL_POLYGON )
- glVertex2f( 0.1, 0.5 )
- glVertex2f( 0.1, 0.1 )
- glVertex2f( 0.5, 0.5 )
- glVertex2f( 0.5, 0.1 )
- glEnd()
My first OpenGL program
46List of the Primitives
47GL_POINTS
- glColor3f( 0.0, 0.0, 1.0 )
- glBegin(GL_POINTS)
- glVertex3f( 0.1, 0.9, 0 )
- glVertex3f( 0.1, 0.2, 0 )
- glVertex3f( 0.9, 0.9, 0 )
- glVertex3f( 0.9, 0.2, 0 )
- glEnd()
48GL_POINTS
- glColor3f( 0.0, 0.0, 1.0 )
- glBegin(GL_POINTS)
- glVertex3f( 0.1, 0.9, 0 )
- glVertex3f( 0.1, 0.2, 0 )
- glVertex3f( 0.9, 0.9, 0 )
- glVertex3f( 0.9, 0.2, 0 )
- glEnd()
49GL_LINES connects two points to form a line. Odd
number of vertices last ignored
glColor3f( 0.0, 0.0, 1.0 ) glBegin(GL_LINES) gl
Vertex3f( 0.1, 0.2, 0 ) glVertex3f( 0.1,
0.9, 0 ) glVertex3f( 0.9, 0.9, 0 )
glVertex3f( 0.9, 0.2, 0 ) glEnd()
50GL_LINE_STRIP draws lines without lifting the
pen
glColor3f( 0.0, 0.0, 1.0 ) glBegin(GL_LINE_STRIP)
glVertex3f( 0.1, 0.2, 0 ) glVertex3f(
0.1, 0.9, 0 ) glVertex3f( 0.9, 0.9, 0 )
glVertex3f( 0.9, 0.2, 0 ) glEnd()
51GL_LINE_LOOP do the same as GL_LINE_STRIP and
connect the first and last points
glColor3f( 0.0, 0.0, 1.0 ) glBegin(GL_LINE_LOOP)
glVertex3f( 0.1, 0.2, 0 ) glVertex3f(
0.1, 0.9, 0 ) glVertex3f( 0.9, 0.9, 0 )
glVertex3f( 0.9, 0.2, 0 ) glEnd()
52GL_TRIANGLES take vertices in groups of three and
draw triangles. If the number of Vertices is not
divisible by 3, those vertices at the end are
ignored.
What will this program fragment draw? glColor3f(
0.0, 0.0, 1.0 ) glBegin(GL_TRIANGLES) glVertex3
f( 0.1, 0.9, 0 ) glVertex3f( 0.1, 0.2, 0 )
glVertex3f( 0.9, 0.9, 0 ) glVertex3f( 0.9,
0.2, 0 ) glEnd()
53GL_TRIANGLE_STRIP also does this with the
exception that every vertex after the first three
forms a connected triangles( i.e., v0, v1, v2,
then v2, v1 and v3, then v2, v3 and v4).
glColor3f( 0.0, 0.0, 1.0 ) glBegin(GL_TRIANGLE_ST
RIP) glVertex3f( 0.1, 0.2, 0.0 ) glVertex3f(
0.1, 0.5, 0.0 ) glColor3f ( 1.0, 0.0, 0.0
) glVertex3f( 0.5, 0.5, 0.0 ) glVertex3f(
0.5, 0.2, 0.0 ) glEnd()
54GL_TRIANGLE_FAN forms triangles that share the
common first vertex.
glColor3f( 0.0, 0.0, 1.0 ) glBegin(GL_TRIANGLE_
FAN) glVertex3f( 0.1, 0.2, 0 ) glVertex3f(
0.1, 0.9, 0 ) glVertex3f( 0.9, 0.5, 0
) glVertex3f( 0.5, 0.2, 0 ) glEnd()
55GL_QUADS takes vertices in-groups of four to draw
four-side polygons. If the number of points is
not divisible by 4, the last a few points are
ignored.
glColor3f( 0.0, 0.0, 1.0 ) glBegin(GL_QUADS) gl
Vertex3f( 0.1, 0.2, 0 ) glVertex3f( 0.1, 0.5, 0
) glVertex3f( 0.5 ,0.5,0) glVertex3f(
0.5,0.2, 0 ) glColor3f( 0.0, 1.0, 0.0 )
glVertex3f( 0.6,0.2, 0 ) glVertex3f(
0.6,0.6, 0 ) glVertex3f( 0.9,0.6, 0 )
glVertex3f( 0.9,0.2, 0 ) glEnd()
56GL_QUADS takes vertices in-groups of four to draw
four-side polygons. If the number of points is
not divisible by 4, the last a few points are
ignored.
GL_QUAD_STRIP draws quads(four sided polygons)
using vertices v0, v1, v2, v3 then v4, v5, v6,
v7.
57GL_POLYGON draws a polygon with the specified
vertices
- glColor3f( 0.0, 0.0, 1.0 )
- glBegin(GL_POLYGON)
- glVertex3f( 0.1, 0.2, 0 )
- glVertex3f( 0.1, 0.9, 0 )
- glVertex3f( 0.9, 0.9, 0 )
- glVertex3f( 0.9, 0.2, 0 )
- glEnd()
58 59Approaches Algorithmic Approach. Line Segment
60Approaches Algorithmic Approach. Line Segment
61Approaches Algorithmic Approach. Line Segment
Back
62Discrete Circles
- Approaches
- ysqrt(r2 x2) bad quality of the image
- xr.cos(f), yr.sin(f) slow
63Discrete Circles
- Symmetry
- The formula ysqrt(r2 x2) is used for the
second octant. - The symmetry of the circle is explored
64Discrete Circles
65Discrete Circles
Back
66Approaches Algorithmic Approach. Deficiencies
- for i 1 to 200 do
- Circle (x, y, i)
Back