OpenGL-2.12.0.1: A binding for the OpenGL graphics system

Copyright (c) Sven Panne 2002-2013 BSD3 Sven Panne stable portable None Haskell2010

Graphics.Rendering.OpenGL.GLU.Tessellation

Description

This module corresponds to chapter 5 (Polygon Tessellation) of the GLU specs.

Synopsis

# Polygon description

The basic building block in tessellation is a 3D vertex with an associated property, e.g. color, texture coordinates, etc.

Constructors

 AnnotatedVertex (Vertex3 GLdouble) v

Instances

 Eq v => Eq (AnnotatedVertex v) Ord v => Ord (AnnotatedVertex v) Storable v => Storable (AnnotatedVertex v)

newtype ComplexContour v Source

A complex contour, which can be self-intersecting and/or concave.

Constructors

 ComplexContour [AnnotatedVertex v]

Instances

 Eq v => Eq (ComplexContour v) Ord v => Ord (ComplexContour v)

newtype ComplexPolygon v Source

A complex (possibly concave) polygon, represented by one or more complex and possibly intersecting contours.

Constructors

 ComplexPolygon [ComplexContour v]

Instances

 Eq v => Eq (ComplexPolygon v) Ord v => Ord (ComplexPolygon v)

# Combining vertices

Four vertex properties (cf. `AnnotatedVertex`) with associated weigths summing up to 1.0.

Constructors

 WeightedProperties (GLfloat, v) (GLfloat, v) (GLfloat, v) (GLfloat, v)

Instances

 Eq v => Eq (WeightedProperties v) Ord v => Ord (WeightedProperties v)

type Combiner v = Vertex3 GLdouble -> WeightedProperties v -> v Source

A function combining given vertex properties into a property for a newly generated vertex

# Tessellation parameters

The relative tolerance under which two vertices can be combined (see `Combiner`). Multiplication with the largest coordinate magnitude of all polygon vertices yields the maximum distance between two mergeable vertices.

Note that merging is optional and the tolerance is only a hint.

# Tessellator type

type Tessellator p v = TessWinding -> Tolerance -> Normal3 GLdouble -> Combiner v -> ComplexPolygon v -> IO (p v) Source

A general tessellator type.

Before tessellation of a complex polygon, all its vertices are projected into a plane perpendicular to the given normal. If the given normal is `Normal3 0 0 0`, a fitting plane of all vertices is used.

# Contour extraction

newtype SimpleContour v Source

A simple, non-self-intersecting contour

Constructors

 SimpleContour [AnnotatedVertex v]

Instances

 Eq v => Eq (SimpleContour v) Ord v => Ord (SimpleContour v)

newtype PolygonContours v Source

The contours of a complex polygon, represented by one or more non-intersecting simple contours

Constructors

 PolygonContours [SimpleContour v]

Instances

 Eq v => Eq (PolygonContours v) Ord v => Ord (PolygonContours v)

# Triangulation

type TriangleVertex v = AnnotatedVertex (v, EdgeFlag) Source

data Triangle v Source

A triangle, represented by three triangle vertices

Constructors

 Triangle (TriangleVertex v) (TriangleVertex v) (TriangleVertex v)

Instances

 Eq v => Eq (Triangle v) Ord v => Ord (Triangle v)

newtype Triangulation v Source

A triangulation of a complex polygon

Constructors

 Triangulation [Triangle v]

Instances

 Eq v => Eq (Triangulation v) Ord v => Ord (Triangulation v)

# Tessellation into primitives

data Primitive v Source

Constructors

 Primitive PrimitiveMode [AnnotatedVertex v]

Instances

 Eq v => Eq (Primitive v) Ord v => Ord (Primitive v)

newtype SimplePolygon v Source

Constructors

 SimplePolygon [Primitive v]

Instances

 Eq v => Eq (SimplePolygon v) Ord v => Ord (SimplePolygon v)