GlmNet is a .NET version of the excellent OpenGL Mathematics library (GLM).
Switch branches/tags
Clone or download
Latest commit 0125dd6 Mar 25, 2015
Type Name Latest commit message Commit time
Failed to load latest commit information.
glm Second cut - added the glm source and made a copy of the functionalit… Mar 15, 2014
release Work in progress on tests and coverage report. Jan 24, 2015
source/GlmNet Fixed a bug in 'project'. Mar 16, 2015
.gitignore Bumped to v0.3.0 Nov 29, 2014
.travis.yml Third.. Nov 29, 2014
LICENSE Initial commit Mar 15, 2014 Update Mar 25, 2015


GlmNet is a .NET version of the excellent OpenGL Mathematics library (GLM).

The OpenGL Mathematics Library is open source, licensed under the MIT license. I would like to thank Christophe Riccio for his permission to wrap the library.

Important: I am developing GlmNet as I need it - so there are very few advanced features from GLM ported over yet. Please do feel free to fork the code and add the features as you need them - if you create pull requests I'll merge them into the main branch.

Install it with Nuget:

PM> Install-Package GlmNet

That's all there is to it!


GlmNet attempts to be as syntactically similar to GLM as possible. Examples are:

mat4 projectionMatrix = glm.perspective(rads, (float)Width / (float)Height, 0.1f, 100.0f);
mat4 viewMatrix = glm.translate(new mat4(1.0f), new vec3(0.0f, 0.0f, -5.0f));
mat4 modelMatrix = glm.scale(new mat4(1.0f), new vec3(0.5f));


Column Major Matrices

GLM.NET matrices are Column Major. This is because GLM attempts to mimic GLSL as closely as possible.

| a b c |
| d e f | = |M|
| g h i |

This means:

M[0] gives column 0, i.e:

| a |
| d |
| g |

M[1][2] or M[1,2] gives column 1, row 2, i.e:


Column major matrices are used in OpenGL, row major in DirectX. Many C++ libraries are row major, be aware that GLM.NET is column major. This means that as OpenGL vectors are typically columns, you multiply in the order matrix * vector:

a = m * v

Rather than v * m.

Matrix Initialisation

Matrices are NOT initialised to the identity. Use the identity function. All types are based on floats. Matrix elements are references as multidimensional arrays when you want to change them, e.g:

// Get data from matrices like this:
var element = matrix[1][2];

// ..or this..
var element = matrix[1,2];

// But SET data in a matrix like this:
matrix[1,2] = element;

All angles in GlmNet are expected to be in radians - no conversion to or from degrees is ever done.


glm - A copy of the latest version of the OpenGL Mathematics library. source - The sourcecode for GLMNET.


GLM Core

Angle and Trigonometry Functions

  • acos
  • acosh
  • asin
  • asinh
  • atan
  • atanh
  • cos
  • cosh
  • degrees
  • radians
  • sin
  • sinh
  • tan
  • tanh

Geometric Functions

  • dot
  • cross
  • normalize

Not Implemented

  • distance
  • faceforward
  • length
  • reflect
  • refract

Matrix Functions

  • inverse

Not implemented

  • determinant
  • matrixCompMult
  • outerProduct
  • transpose_type

GTC Extensions (Stable)


All functions are supported. Angles are always in radians.

  • frustum
  • infinitePerspective
  • lookAt
  • ortho
  • perspective
  • perspectiveFov
  • pickMatrix
  • project
  • rotate
  • scale
  • translate
  • tweakedInfinitePerspective
  • unProject

Supported Functionality

  • Vectors: vec2, vec3, vec4
  • Matrices: mat2, mat3, mat4
  • Transformations: scale, rotate, translate
  • Projections: perspective, frustum
  • Matrix * Matrix
  • Matrix * Vector