OpenGL-2.8.0.0: A binding for the OpenGL graphics system

Portabilityportable
Stabilitystable
Maintainersven.panne@aedion.de
Safe HaskellNone

Graphics.Rendering.OpenGL.GL.CoordTrans

Contents

Description

This module corresponds to section 2.11 (Coordinate Transformations) of the OpenGL 2.1 specs.

Synopsis

Controlling the Viewport

depthRange :: StateVar (GLclampd, GLclampd)Source

After clipping and division by w, depth coordinates range from -1 to 1, corresponding to the near and far clipping planes. depthRange specifies a linear mapping of the normalized depth coordinates in this range to window depth coordinates. Regardless of the actual depth buffer implementation, window coordinate depth values are treated as though they range from 0 through 1 (like color components). Thus, the values accepted by depthRange are both clamped to this range before they are accepted.

The initial setting of (0, 1) maps the near plane to 0 and the far plane to 1. With this mapping, the depth buffer range is fully utilized.

It is not necessary that the near value be less than the far value. Reverse mappings such as (1, 0) are acceptable.

data Position Source

A 2-dimensional position, measured in pixels.

Constructors

Position !GLint !GLint 

Instances

Eq Position 
Ord Position 
Show Position 

data Size Source

A 2-dimensional size, measured in pixels.

Constructors

Size !GLsizei !GLsizei 

Instances

Eq Size 
Ord Size 
Show Size 

viewport :: StateVar (Position, Size)Source

Controls the affine transformation from normalized device coordinates to window coordinates. The viewport state variable consists of the coordinates (x, y) of the lower left corner of the viewport rectangle, (in pixels, initial value (0,0)), and the size (width, height) of the viewport. When a GL context is first attached to a window, width and height are set to the dimensions of that window.

Let (xnd, ynd) be normalized device coordinates. Then the window coordinates (xw, yw) are computed as follows:

xw = (xnd + 1) (width / 2) + x

yw = (ynd + 1) (heigth / 2) + y

Viewport width and height are silently clamped to a range that depends on the implementation, see maxViewportDims.

maxViewportDims :: GettableStateVar SizeSource

The implementation-dependent maximum viewport width and height.

Matrices

data MatrixMode Source

A matrix stack.

Constructors

Modelview GLsizei

The modelview matrix stack of the specified vertex unit.

Projection

The projection matrix stack.

Texture

The texture matrix stack.

Color

The color matrix stack.

MatrixPalette

The matrix palette stack.

Instances

matrixMode :: StateVar MatrixModeSource

Controls which matrix stack is the target for subsequent matrix operations. The initial value is (Modelview 0).

data MatrixOrder Source

Constructors

ColumnMajor 
RowMajor 

Instances

class Storable c => MatrixComponent c whereSource

Methods

rotate :: c -> Vector3 c -> IO ()Source

translate :: Vector3 c -> IO ()Source

scale :: c -> c -> c -> IO ()Source

class Matrix m whereSource

Methods

withNewMatrix :: MatrixComponent c => MatrixOrder -> (Ptr c -> IO ()) -> IO (m c)Source

Create a new matrix of the given order (containing undefined elements) and call the action to fill it with 4x4 elements.

withMatrix :: MatrixComponent c => m c -> (MatrixOrder -> Ptr c -> IO a) -> IO aSource

Call the action with the given matrix. Note: The action is not allowed to modify the matrix elements!

newMatrix :: MatrixComponent c => MatrixOrder -> [c] -> IO (m c)Source

getMatrixComponents :: MatrixComponent c => MatrixOrder -> m c -> IO [c]Source

Instances

currentMatrix :: (Matrix m, MatrixComponent c) => StateVar (m c)Source

Deprecated: use matrix instead

multMatrix :: (Matrix m, MatrixComponent c) => m c -> IO ()Source

data GLmatrix a Source

Instances

Matrix GLmatrix 
Eq (GLmatrix a) 
Ord (GLmatrix a) 
Show (GLmatrix a) 

preservingMatrix :: IO a -> IO aSource

Push the current matrix stack down by one, duplicating the current matrix, excute the given action, and pop the current matrix stack, replacing the current matrix with the one below it on the stack (i.e. restoring it to its previous state). The returned value is that of the given action. Note that a round-trip to the server is probably required. For a more efficient version, see unsafePreservingMatrix.

unsafePreservingMatrix :: IO a -> IO aSource

A more efficient, but potentially dangerous version of preservingMatrix: The given action is not allowed to throw an exception or change the current matrix mode permanently.

Normal Transformation

rescaleNormal :: StateVar CapabilitySource

If rescaleNormal contains Enabled, normal vectors specified with normal are scaled by a scaling factor derived from the modelview matrix. rescaleNormal requires that the originally specified normals were of unit length, and that the modelview matrix contains only uniform scales for proper results. The initial value of rescaleNormal is Disabled.

normalize :: StateVar CapabilitySource

If normalize contains Enabled, normal vectors specified with normal are scaled to unit length after transformation. The initial value of normalize is Disabled.

Generating Texture Coordinates

data Plane a Source

Constructors

Plane !a !a !a !a 

Instances

Eq a => Eq (Plane a) 
Ord a => Ord (Plane a) 
Show a => Show (Plane a) 
Storable a => Storable (Plane a) 

data TextureCoordName Source

Constructors

S 
T 
R 
Q