🎉 Celebrating 25 Years of GameDev.net! 🎉

Not many can claim 25 years on the Internet! Join us in celebrating this milestone. Learn more about our history, and thank you for being a part of our community!

linmath.h - a lean C99 library for linear math, aimed at graphics programming

Started by
-1 comments, last by BlackDoomer 7 years, 5 months ago

linmath.h

I'm glad to proudly present you the library, that I've used with OpenGL to program a small 3D scene for my university course of computer graphics.

I love C99, so I've decided to write scene on it. But then I faced with a probleme: there's no known handy libraries to do 3D linear math for C. All libraries that I found in these days were at least awkward - how about 3 functions calls just for intermediate computations: to create temporary matrix, to compute with it and then delete it?

Except one. After all I still found a library called linmath.h by datenwolf. It was small, easy and handy enough, but it supported only column-major matrices order (to fit better into the processor cache) and had some quirks here and there. So I decided to fork it, fix all those issues and add some additional features.

What original linmath.h supports:

  • vec2, vec3, vec4: 2-, 3- and 4-element vectors respectively.
  • mat4x4: 4x4 matrices in a column-major order.
  • quat: quaternions.
  • All types above are typedef's for plain C arrays, so you can handle them on a function stack.

My fork additionaly have:

  • Optional row-major order for matrices (enabled by LINMATH_H_ROW_MAJOR define).
  • FIxed all the quirks I found like typos: "1." instead of "1.f".
  • Reflection function now defined for all vector types, not only for vec3 and vec4.
  • New functions: mat4x4_set_row() and mat4x4_set_col().
  • Union wrappers types for vectors to provide Cpp-like element access, for example: vec2.i.x and (if supported by compiler) vec2.x, instead of vec2[0].
  • Copy function for vector types, as mat4x4 have.
  • Some useful macros: cast plain vectors to union wrappers, function arguments builders etc.
  • Will be glad to add something else, dependent on your needs.

Link to the GitHub repo: https://github.com/cher-nov/linmath.h

See library source code - it's actually in just one C-header file - to understand how to use and how it works.

Any feedback is highly appreciated. GitHub stars are highly appreciated too. :)

Hope it will be useful for someone.

This topic is closed to new replies.

Advertisement