A C math library targeted at games

Related tags

Graphics kazmath
Overview

Kazmath

Kazmath is a simple 3D maths library written in C. It was initially coded for use in my book, Beginning OpenGL Game Programming - Second edition, but rapidly gained a life of its own. Kazmath is now used by many different projects, and apparently is used in 25% of the worlds mobile games (yeah, I don't believe it either - but it's used in Cocos2d-x).

If you are using Kazmath in a project, I'd be happy to hear about it. Find me on Twitter as @kazade.

Compiling

Compiling is simple using CMake, on Linux:

mkdir build
cd build
cmake ..
make
sudo make install

On other platforms use CMake to generate an appropriate project file.

If you want to build shared libraries you should pass -DBUILD_SHARED_LIBS=YES to the cmake command

Contributing

There are many improvements that could be made to kazmath, including:

  • More tests
  • More optimizations
  • More functions, and primitives
  • More bindings (e.g. Python)

All contributions are welcome. Just send me a pull request on GitHub and I'll review and probably merge!

Donations

If you like what I do, I'm happy to receive donations in DOGE to this address: D6uwEfChxWmWjFGs4jT8VRtabYaza5oAGx :)

Thank you!

Issues
  • AABB 2d and quad

    AABB 2d and quad

    C code:

    • Renamed AABB to AABB3
    • Added AABB2
    • Put common code for intersections in ray2.c into a separate function kmLine2WithLineIntersection, that finds the intersection point, but also returns the "factor" values, so it can be checked if we are looking for a two segment intersection, an infinite ray to segment or whatever C++ code:
    • Added the AABB2 class
    • Added a quad class (non axis aligned box)
    • Added the unary minus operator to vec*.h
    • Added the BoundVec2 class : ( this is subject to be changed : for now the main reason to use this name instead of "ray" is for comparisons, and when moving to 3d, this class can define a ray, a line, or a plane , depending on its interpretation )
    opened by dhontecillas 9
  • Lerp for vectors

    Lerp for vectors

    Added linear interpolation for vectors and also for scalars. Also fixed a couple of return values that were giving errors in VS2010. Removed unnnecessary temp variable in kmVec4Normalize.

    opened by dhontecillas 7
  • c89-fixes and lua-binding for kazmath

    c89-fixes and lua-binding for kazmath

    • add all functions for kazmath/.h (except kazmath/GL/.h)
    • lkazmath.km* for all functions
    • use lkazmath._New or lkazmath._NewWithArray or lkazmath.*NewWithTbl to create a object (struct in C)
    • method ToArray, ToTbl for vec_, mat_
    • OOP support (without prefix km${StructName}), for example
    mat3 = lkazmath.kmMat3New()
    mat3:ToArray()
    

    or you can use

    lkazmath.kmMat3ToArray(mat3)
    
    • alter args(such as kmScalar *out are removed from function params), see lua__kmMat4RotationToAxisAngle, lua__kmLine2WithLineIntersection

    see More...

    opened by rocaltair 5
  • Fixed errors in headers and removed dot product and cross product from o...

    Fixed errors in headers and removed dot product and cross product from o...

    Fixed errors that I did not dectect when compiling the library, and found them when using it.

    Also changed the overloaded operators so dot and cross product are no longer used for operator*.

    opened by dhontecillas 3
  • Kazmath's GL stack doesn't allow for multiple GL contexts/multithreading

    Kazmath's GL stack doesn't allow for multiple GL contexts/multithreading

    Unfortunately, the current GL stack implementation crashes when calling it from different threads using multiple OpenGL contexts. As I required this specific functionality, I forked kazmath and implemented a TLS based context switch for the stack module (see http://github.com/starbugs/kazmath).

    With my modifications, the only thing people have to do when they switch GL contexts is to call kmGLSetCurrentContext(void *) providing a reference to some external context representation that is constant for the lifecycle of a given real GL context. kazmath will then provide a stack for each context automatically (without any changes to the stack interface). My modifications merely require linking to libpthread.

    Some background info: I am authoring a GL-based UI framework for iOS/Mac OS X which uses kazmath for most of the math and vector stuff (http://github.com/starbugs/icedcoffee). My modifications have been tested by a very small group of people currently experimenting with my framework -- no issues so far.

    Anyway, I thought I just give you a ping and ask whether you're interested in pulling these changes? Maybe they are beneficial to others...

    Big thanks for the great library!

    Tobias

    opened by starbugs 3
  • What is ub variable used for?

    What is ub variable used for?

    I wanted to know what is the following variable used for.

    File ray2.c on line 31:

    • 31: kmScalar ub = ((x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3)) / denom;

    It is declared and initialized but never used.

    on lines 33,34

    • 33: kmScalar x = x1 + ua * (x2 - x1);
    • 34: kmScalar y = y1 + ua * (y2 - y1);

    ua variable is used two times.

    Was the ua variable on line 34 meant to be ub?

    opened by garfi43 3
  • error: ‘isnan’ was not declared in this scope

    error: ‘isnan’ was not declared in this scope

    Hi.

    Im getting an error while building the library per instructions.

    [email protected] ~/Code/kazmath/build $ make
    Scanning dependencies of target kazmath
    [  5%] Building C object kazmath/CMakeFiles/kazmath.dir/mat4.c.o
    [ 11%] Building C object kazmath/CMakeFiles/kazmath.dir/mat3.c.o
    [ 16%] Building C object kazmath/CMakeFiles/kazmath.dir/plane.c.o
    [ 22%] Building C object kazmath/CMakeFiles/kazmath.dir/vec4.c.o
    [ 27%] Building C object kazmath/CMakeFiles/kazmath.dir/quaternion.c.o
    [ 33%] Building C object kazmath/CMakeFiles/kazmath.dir/vec2.c.o
    [ 38%] Building C object kazmath/CMakeFiles/kazmath.dir/vec3.c.o
    [ 44%] Building C object kazmath/CMakeFiles/kazmath.dir/utility.c.o
    [ 50%] Building C object kazmath/CMakeFiles/kazmath.dir/aabb2.c.o
    [ 55%] Building C object kazmath/CMakeFiles/kazmath.dir/aabb3.c.o
    [ 61%] Building C object kazmath/CMakeFiles/kazmath.dir/ray2.c.o
    [ 66%] Building C object kazmath/CMakeFiles/kazmath.dir/ray3.c.o
    [ 72%] Building C object kazmath/CMakeFiles/kazmath.dir/GL/mat4stack.c.o
    [ 77%] Building C object kazmath/CMakeFiles/kazmath.dir/GL/matrix.c.o
    [ 83%] Linking C static library libkazmath.a
    [ 83%] Built target kazmath
    [ 88%] Generating ../../tests/main.cpp
    Scanning dependencies of target kazmath_tests
    [ 94%] Building CXX object tests/CMakeFiles/kazmath_tests.dir/main.cpp.o
    In file included from /home/sbr/Code/kazmath/tests/main.cpp:5:0:
    /home/sbr/Code/kazmath/tests/test_quaternion.h: In member function ‘void TestQuaternion::test_quaternion_slerp_edge_case()’:
    /home/sbr/Code/kazmath/tests/test_quaternion.h:33:36: error: ‘isnan’ was not declared in this scope
             assert_true(!isnan(result.x));
                                        ^
    /home/sbr/Code/kazmath/tests/kaztest/kaztest.h:15:43: note: in definition of macro ‘assert_true’
     #define assert_true(actual) _assert_true((actual), __FILE__, __LINE__)
                                               ^
    /home/sbr/Code/kazmath/tests/test_quaternion.h:33:36: note: suggested alternative:
             assert_true(!isnan(result.x));
                                        ^
    /home/sbr/Code/kazmath/tests/kaztest/kaztest.h:15:43: note: in definition of macro ‘assert_true’
     #define assert_true(actual) _assert_true((actual), __FILE__, __LINE__)
                                               ^
    In file included from /usr/include/c++/5/random:38:0,
                     from /usr/include/c++/5/bits/stl_algo.h:66,
                     from /usr/include/c++/5/algorithm:62,
                     from /home/sbr/Code/kazmath/tests/kaztest/kaztest.h:9,
                     from /home/sbr/Code/kazmath/tests/main.cpp:5:
    /usr/include/c++/5/cmath:641:5: note:   ‘std::isnan’
         isnan(_Tp __x)
         ^
    tests/CMakeFiles/kazmath_tests.dir/build.make:76: recipe for target 'tests/CMakeFiles/kazmath_tests.dir/main.cpp.o' failed
    make[2]: *** [tests/CMakeFiles/kazmath_tests.dir/main.cpp.o] Error 1
    CMakeFiles/Makefile2:140: recipe for target 'tests/CMakeFiles/kazmath_tests.dir/all' failed
    make[1]: *** [tests/CMakeFiles/kazmath_tests.dir/all] Error 2
    Makefile:160: recipe for target 'all' failed
    make: *** [all] Error 2
    

    Im using gcc 5.4.0. on Ubuntu.

    opened by sbrki 2
  • lua-binding for kazmath

    lua-binding for kazmath

    hi~ @Kazade I forked this lua-binding

    so far so good.

    • add all functions for kazmath/.h (except kazmath/GL/.h)
    • lkazmath.km* for all functions
    • use lkazmath._New or lkazmath._NewWithArray or lkazmath.*NewWithTbl to create a object (struct in C)
    • method ToArray, ToTbl for vec_, mat_
    • OOP support (without prefix km${StructName}), for example
    mat3 = lkazmath.kmMat3New()
    mat3:ToArray()
    

    or you can use

    lkazmath.kmMat3ToArray(mat3)
    
    • alter args(such as kmScalar *out are removed from function params), see lua__kmMat4RotationToAxisAngle, lua__kmLine2WithLineIntersection
    opened by rocaltair 2
  • Changed all occurrences of // line comments into /* ... */ line comments...

    Changed all occurrences of // line comments into /* ... */ line comments...

    ... in .c , .h files and kazmath.config so it will compile in C89 (--pedantic) and changed one instance (kazmath/quaternion.c) of a block /* ... */ comment to #if 0 ... #endif so fixing the contained line comments wouldn't break anything

    opened by davidaciko 2
  • Collision/response related functions

    Collision/response related functions

    I'm probably going to contribute some collision/response related functions to kazmath somewhere in near future, and introduce new types such as kmOBB, kmEllipse, kmTriangle, ...

    You can see video of the math in action here: http://www.youtube.com/watch?v=HYW2lI3alG0

    You can see the current code that is still unfinished and some math is broken here (at top of file everything prefixed with km): https://github.com/Cloudef/colhck/blob/master/test/coltest.c

    Though, I have question regarding kmAABBExtent, will this kind of type be pulled in or should the original kmAABB be replaced?

    The reason for introducing kmAABBExtent is reduced memory usage.

    opened by Cloudef 2
  • Component wise multiplication and division

    Component wise multiplication and division

    Had to rename the max and min functions due to conflicts with other libraries and used the prefix km as in all other functions.

    Added component wise multiplication and division.

    Also added operators for the c++ classes ( += , -= , *=, /= ). From my point of view, the overloaded operator * in the C++ that does the dot product should perform the component wise multiplication, more in line with what happens in GLSL, and use a static dot function inside the class. But, I guess that making that change would break code using the library, and I didn't touch it.

    Also moved the .h files for kazmathxx outside the src directory. That is weird when you have to make an :

    include <kathmath/src/vec2.h>

    opened by dhontecillas 2
  • docs: fix simple typo, exmaple -> example

    docs: fix simple typo, exmaple -> example

    There is a small typo in lua/README.md.

    Should read example rather than exmaple.

    Semi-automated pull request generated by https://github.com/timgates42/meticulous/blob/master/docs/NOTE.md

    opened by timgates42 0
  • some parameters missing const

    some parameters missing const

    to be honest not sure if this is even an issue?

    kmMat4* kmMat4Scaling(kmMat4* pOut, const kmScalar x, const kmScalar y, kmScalar z) kmMat4* kmMat4Translation(kmMat4* pOut, const kmScalar x, kmScalar y, const kmScalar z)

    const missing on scaling z and translation y

    there may be others

    opened by chriscamacho 0
  • test_quaternion.h fails

    test_quaternion.h fails

    'make' command error: "isnan was not declared in this scope"

    Fix could be adding the line: using std::isnan; right after the includes in the same file.

    opened by XxMoNsTeR 0
  • Cannot build on OSX 10.11.6

    Cannot build on OSX 10.11.6

    Steps to reproduce:

    git clone https://github.com/Kazade/kazmath.git
    cd kazmath
    mkdir build
    cd build
    cmake ..
    make
    

    produces:

    /Users/jamiltron/opt/kazmath/tests/kaztest/kaztest.h:53:34: warning: variadic
          templates are a C++11 extension [-Wc++11-extensions]
        template<typename T, typename... Args>
                                     ^
    /Users/jamiltron/opt/kazmath/tests/kaztest/kaztest.h:60:34: warning: variadic
          templates are a C++11 extension [-Wc++11-extensions]
        template<typename T, typename... Args>
                                     ^
    /Users/jamiltron/opt/kazmath/tests/kaztest/kaztest.h:96:5: error: exception
          specification of overriding function is more lax than base version
        ~AssertionError() noexcept (true) {
        ^
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/stdexcept:76:13: note:
          overridden virtual function is here
        virtual ~logic_error() _NOEXCEPT;
                ^
    In file included from /Users/jamiltron/opt/kazmath/tests/main.cpp:5:
    /Users/jamiltron/opt/kazmath/tests/kaztest/kaztest.h:96:22: error: expected ';'
          at end of declaration list
        ~AssertionError() noexcept (true) {
                         ^
                         ;
    /Users/jamiltron/opt/kazmath/tests/kaztest/kaztest.h:85:9: error: member
          initializer 'file' does not name a non-static data member or base class
            file(""),
            ^~~~~~~~
    /Users/jamiltron/opt/kazmath/tests/kaztest/kaztest.h:91:9: error: member
          initializer 'file' does not name a non-static data member or base class
            file(file_and_line.first),
            ^~~~~~~~~~~~~~~~~~~~~~~~~
    /Users/jamiltron/opt/kazmath/tests/kaztest/kaztest.h:121:13: warning: 'auto'
          type specifier is a C++11 extension [-Wc++11-extensions]
                auto file_and_line = std::make_pair(file, line);
                ^
    /Users/jamiltron/opt/kazmath/tests/kaztest/kaztest.h:129:13: warning: 'auto'
          type specifier is a C++11 extension [-Wc++11-extensions]
                auto file_and_line = std::make_pair(file, line);
                ^
    /Users/jamiltron/opt/kazmath/tests/kaztest/kaztest.h:137:13: warning: 'auto'
          type specifier is a C++11 extension [-Wc++11-extensions]
                auto file_and_line = std::make_pair(file, line);
                ^
    /Users/jamiltron/opt/kazmath/tests/kaztest/kaztest.h:146:13: warning: 'auto'
          type specifier is a C++11 extension [-Wc++11-extensions]
                auto file_and_line = std::make_pair(file, line);
                ^
    /Users/jamiltron/opt/kazmath/tests/kaztest/kaztest.h:154:13: warning: 'auto'
          type specifier is a C++11 extension [-Wc++11-extensions]
                auto file_and_line = std::make_pair(file, line);
                ^
    /Users/jamiltron/opt/kazmath/tests/kaztest/kaztest.h:162:13: warning: 'auto'
          type specifier is a C++11 extension [-Wc++11-extensions]
                auto file_and_line = std::make_pair(file, line);
                ^
    /Users/jamiltron/opt/kazmath/tests/kaztest/kaztest.h:171:13: warning: 'auto'
          type specifier is a C++11 extension [-Wc++11-extensions]
                auto file_and_line = std::make_pair(file, line);
                ^
    /Users/jamiltron/opt/kazmath/tests/kaztest/kaztest.h:293:41: error: a space is
          required between consecutive right angle brackets (use '> >')
        std::vector<std::shared_ptr<TestCase>> instances_;
                                            ^~
                                            > >
    /Users/jamiltron/opt/kazmath/tests/kaztest/kaztest.h:189:29: warning:
          range-based for loop is a C++11 extension [-Wc++11-extensions]
            for(std::string name: names) {
                                ^
    /Users/jamiltron/opt/kazmath/tests/kaztest/kaztest.h:193:22: warning:
          range-based for loop is a C++11 extension [-Wc++11-extensions]
            for(U& method: methods) {
                         ^
    /Users/jamiltron/opt/kazmath/tests/kaztest/kaztest.h:194:47: error: no member
          named 'bind' in namespace 'std'; did you mean 'find'?
                std::function<void()> func = std::bind(method, dynamic_cast<...
                                             ~~~~~^~~~
                                                  find
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/algorithm:862:1: note:
          'find' declared here
    find(_InputIterator __first, _InputIterator __last, const _Tp& __value_)
    ^
    In file included from /Users/jamiltron/opt/kazmath/tests/main.cpp:5:
    /Users/jamiltron/opt/kazmath/tests/kaztest/kaztest.h:195:30: error: expected
          expression
                tests_.push_back([=]() {
                                 ^
    /Users/jamiltron/opt/kazmath/tests/kaztest/kaztest.h:209:9: warning: 'auto' type
          specifier is a C++11 extension [-Wc++11-extensions]
            auto new_tests = tests_;
            ^
    /Users/jamiltron/opt/kazmath/tests/kaztest/kaztest.h:210:9: warning: 'auto' type
          specifier is a C++11 extension [-Wc++11-extensions]
            auto new_names = names_;
            ^
    /Users/jamiltron/opt/kazmath/tests/kaztest/kaztest.h:226:40: warning:
          range-based for loop is a C++11 extension [-Wc++11-extensions]
            for(std::function<void ()> test: new_tests) {
                                           ^
    /Users/jamiltron/opt/kazmath/tests/kaztest/kaztest.h:243:23: error: no member
          named 'file' in 'AssertionError'
                    if(!e.file.empty()) {
                        ~ ^
    /Users/jamiltron/opt/kazmath/tests/kaztest/kaztest.h:244:50: error: no member
          named 'file' in 'AssertionError'
                        std::cout << "        " << e.file << ":" << e.line <...
                                                   ~ ^
    /Users/jamiltron/opt/kazmath/tests/kaztest/kaztest.h:246:41: error: no member
          named 'file' in 'AssertionError'
                        std::ifstream ifs(e.file);
                                          ~ ^
    /Users/jamiltron/opt/kazmath/tests/main.cpp:27:43: error: expected expression
            std::vector<void (TestAABB::*)()>({&TestAABB::test_aabb_expand_t...
                                              ^
    /Users/jamiltron/opt/kazmath/tests/main.cpp:28:9: error: expected expression
            {"TestAABB::test_aabb_expand_to_contain", "TestAABB::test_aabb_c...
            ^
    /Users/jamiltron/opt/kazmath/tests/main.cpp:32:43: error: expected expression
            std::vector<void (TestMat3::*)()>({&TestMat3::test_mat3_inverse...
                                              ^
    /Users/jamiltron/opt/kazmath/tests/main.cpp:33:9: error: expected expression
            {"TestMat3::test_mat3_inverse", "TestMat3::test_mat3_transpose"...
            ^
    /Users/jamiltron/opt/kazmath/tests/main.cpp:37:43: error: expected expression
            std::vector<void (TestMat4::*)()>({&TestMat4::test_mat4_inverse...
                                              ^
    /Users/jamiltron/opt/kazmath/tests/main.cpp:38:9: error: expected expression
            {"TestMat4::test_mat4_inverse", "TestMat4::test_mat4_and_quatern...
            ^
    /Users/jamiltron/opt/kazmath/tests/main.cpp:42:44: error: expected expression
            std::vector<void (TestPlane::*)()>({&TestPlane::test_plane_extra...
                                               ^
    /Users/jamiltron/opt/kazmath/tests/main.cpp:43:9: error: expected expression
            {"TestPlane::test_plane_extraction_from_matrix", "TestPlane::tes...
            ^
    /Users/jamiltron/opt/kazmath/tests/main.cpp:47:49: error: expected expression
            std::vector<void (TestQuaternion::*)()>({&TestQuaternion::test_q...
                                                    ^
    fatal error: too many errors emitted, stopping now [-ferror-limit=]
    14 warnings and 20 errors generated.
    make[2]: *** [tests/CMakeFiles/kazmath_tests.dir/main.cpp.o] Error 1
    make[1]: *** [tests/CMakeFiles/kazmath_tests.dir/all] Error 2
    make: *** [all] Error 2
    
    opened by jamiltron 5
  • Cannot build on Windows using VC++ compiler.

    Cannot build on Windows using VC++ compiler.

    Currently, trying to build on Windows using the Visual C++ compiler bundled with Visual Studio causes the following error (plus a host of warnings concerning uninitialized variables):

    Cannot open include file: 'pthread.h': No such file or directory : matrix.c

    opened by Varriount 3
  • kazmath fails on test_mat4_and_quaternion_consistency

    kazmath fails on test_mat4_and_quaternion_consistency

    I am trying to use Kazmath for my engine, but I am having issues with incorrect lookAt, so I launched the test and I got this :

    ./kazmath_tests

    1.000000 0.000000 0.000000

    1.000000 0.000000 0.000000 /home/gpinchon/Bureau/projects/OpenGL/kazmath/tests/test_mat4.cpp:66: error: Failure in test_mat4_and_quaternion_consistency: kmMat4AreEqual(&tmp, &mat) FAILURE: 1 out of 37 tests failed (1 failures). Test time: 0.00 seconds.

    opened by Gpinchon 0
Owner
Luke Benstead
Luke Benstead
📽 Highly Optimized Graphics Math (glm) for C

?? OpenGL Mathematics (glm) for C Documentation Almost all functions (inline versions) and parameters are documented inside the corresponding headers.

Recep Aslantas 1.4k Aug 12, 2022
Bash math utilities

Bashmash Bash math utilities What is Bashmash? Bashmash is a set of math utilities for the Bash language. It simplifies common mathematical operations

Hubert Pastyrzak 11 Mar 11, 2021
Phyxed is a 2D physics engine with support for fixed point math.

Phyxed is a 2D physics engine with support for fixed point math.

Anders Elfgren 23 Jul 10, 2022
A multi core friendly rigid body physics and collision detection library suitable for games and VR applications.

A multi core friendly rigid body physics and collision detection library suitable for games and VR applications.

null 2k Aug 7, 2022
Lightweight and modular C++11 graphics middleware for games and data visualization

Magnum — Lightweight and modular C++11/C++14 graphics middleware for games and data visualization Looking for an open-source library that gives you gr

Vladimír Vondruš 4.1k Aug 14, 2022
Four little games made in C / C++ (CSFML / SFML)

Graphical projects Name Language Grade Year My hunter C / CSFML B 2017 My runner C / CSFML B 2017 My world C / CSFML B 2018 My rpg C / CSFML A 2018 Re

Luis Rosario 11 Mar 30, 2021
Bullet Physics SDK: real-time collision detection and multi-physics simulation for VR, games, visual effects, robotics, machine learning etc.

Bullet Physics SDK: real-time collision detection and multi-physics simulation for VR, games, visual effects, robotics, machine learning etc.

Bullet Physics SDK 9.6k Aug 10, 2022
Metal-cpp is a low-overhead C++ interface for Metal that helps developers add Metal functionality to graphics apps, games, and game engines that are written in C++.

About metal-cpp is a low overhead and header only C++ interface for Metal that helps developers add Metal functionality to graphics applications that

Бранимир Караџић 145 Jul 31, 2022
Open-source, cross-platform, C++ game engine for creating 2D/3D games.

GamePlay v3.0.0 GamePlay is an open-source, cross-platform, C++ game framework/engine for creating 2D/3D mobile and desktop games. Website Wiki API De

gameplay3d 3.8k Aug 6, 2022
The official Open-Asset-Importer-Library Repository. Loads 40+ 3D-file-formats into one unified and clean data structure.

Open Asset Import Library (assimp) A library to import and export various 3d-model-formats including scene-post-processing to generate missing render

Open Asset Import Library 8.1k Aug 7, 2022
Cross-platform, graphics API agnostic, "Bring Your Own Engine/Framework" style rendering library.

bgfx - Cross-platform rendering library GitHub Discussions Discord Chat What is it? Cross-platform, graphics API agnostic, "Bring Your Own Engine/Fram

Бранимир Караџић 11.9k Aug 14, 2022
Modern C++14 library for the development of real-time graphical applications

CI Community Support bs::framework is a C++ library that aims to provide a unified foundation for the development of real-time graphical applications,

null 1.7k Aug 7, 2022
A modern cross-platform low-level graphics library and rendering framework

Diligent Engine A Modern Cross-Platform Low-Level 3D Graphics Library Diligent Engine is a lightweight cross-platform graphics API abstraction library

Diligent Graphics 2.4k Aug 12, 2022
A multi-platform library for OpenGL, OpenGL ES, Vulkan, window and input

GLFW Introduction GLFW is an Open Source, multi-platform library for OpenGL, OpenGL ES and Vulkan application development. It provides a simple, platf

GLFW 9.4k Aug 6, 2022
Low Level Graphics Library (LLGL) is a thin abstraction layer for the modern graphics APIs OpenGL, Direct3D, Vulkan, and Metal

Low Level Graphics Library (LLGL) Documentation NOTE: This repository receives bug fixes only, but no major updates. Pull requests may still be accept

Lukas Hermanns 1.4k Aug 13, 2022
Antialiased 2D vector drawing library on top of OpenGL for UI and visualizations.

This project is not actively maintained. NanoVG NanoVG is small antialiased vector graphics rendering library for OpenGL. It has lean API modeled afte

Mikko Mononen 4.4k Aug 11, 2022
An Open-Source subdivision surface library.

OpenSubdiv OpenSubdiv is a set of open source libraries that implement high performance subdivision surface (subdiv) evaluation on massively parallel

Pixar Animation Studios 2.6k Aug 9, 2022
C++ (with python bindings) library for easily reading/writing/manipulating common animation particle formats such as PDB, BGEO, PTC. See the discussion group @ http://groups.google.com/group/partio-discuss

Partio - A library for particle IO and manipulation This is the initial source code release of partio a tool we used for particle reading/writing. It

Walt Disney Animation Studios 402 Jul 17, 2022