Giter Site home page Giter Site logo

brutpitt / vgmath Goto Github PK

View Code? Open in Web Editor NEW
11.0 3.0 1.0 35 KB

Math Library: vectors, quaternions, square Matrix, GLSL / HLSL alias types names, template or fixed types configurable

License: BSD 2-Clause "Simplified" License

Objective-C 16.09% C++ 83.91%
math math-library vectors matrix matrices quaternions quaternion classes glsl hlsl

vgmath's Introduction

vgMath  v3.0

vgMath is a header only, compact, optimized, class math library, it contains classes to manipulate vectors (with 2/3/4 components), quaternions, square matricies (3x3 and 4x4). It contains also 4 helper functions to define Model/View/Proj matrix: perspective, frustum, lookAt, ortho, both LeftHanded and RightHanded

Consist only of the file vgMath.h, plus a external vgConfig.h used to permit to configure it, indeed a particularity of vgMath is that it's configurable: it can switch from fixed type (float) for small projects or limited resources, to template classes with all types (float / double / int / uint) simply via #define It uses GLSL (alias) name convention, but if is preferred, is possible to add also HLSL names type. (always via #define)

Other peculiarity is that it's a "subset" of glm mathematics library, with compatible names definition, so if in a future you want pass to it, you don't need to change anything in the source code. (HLSL types names are not compatible with glm)

vgMath is base of other my projects and tools:

  • virtualGizmo3D - Virtual GIZMO 3D object manipulator / orientator, via mouse, with pan and dolly/zoom features
  • imGuIZMO.quat - graphic ImGui GIZMO widget a 3D object manipulator / orientator
  • glChAoS.P 3D strange attractors GPU scout and hypercomplex fractals - over 200 Million particles in real time

*examine they to take cues: there are several example and also WebGL live demo

Configure vgMath

The file vgConfig.h allows to user to configure internal math functionality. In particular is possible select between:

  • static float classes (Default) / template classes
  • internal vgMath tool (Default) / glm mathematics library (it only affects virtualGizmo3D / imGuIZMO.quat on which library to use internally: vgMath or glm )
  • Right (Default) / Left handed coordinate system (lookAt, perspective, ortho, frustum - functions)
  • Add additional HLSL types name convention
  • enable (Default) / disable the automatic entry of using namespace vgm; at end of vgMath.h

You can do this simply by commenting / uncommenting a line in vgConfig.h or adding related "define" to your project, as you can see below:

// uncomment to use TEMPLATE internal vgMath classes/types
//
// This is if you need to extend the use of different math types in your code
//      or for your purposes, there are predefined alias:
//          float  ==>  vec2 / vec3 / vec4 / quat / mat3|mat3x3 / mat4|mat4x4
//      and more TEMPLATE (only!) alias:
//          double ==> dvec2 / dvec3 / dvec4 / dquat / dmat3|dmat3x3 / dmat4|dmat4x4
//          int    ==> ivec2 / ivec3 / ivec4
//          uint   ==> uvec2 / uvec3 / uvec4
// If you select TEMPLATE classes the widget too will use internally them 
//      with single precision (float)
//
// Default ==> NO template
//------------------------------------------------------------------------------
//#define VGM_USES_TEMPLATE
// uncomment to use "glm" (0.9.9 or higher) library instead of vgMath
//      Need to have "glm" installed and in your INCLUDE research compiler path
//
// vgMath is a subset of "glm" and is compatible with glm types and calls
//      change only namespace from "vgm" to "glm". It's automatically set by
//      including vGizmo.h or vgMath.h or imGuIZMOquat.h
//
// note: affects only virtualGizmo3D / imGuIZMO.quat on which library to use
//      internally: vgMath | glm
//
// Default ==> use vgMath
//      If you enable GLM use, automatically is enabled also VGM_USES_TEMPLATE
//          if you can, I recommend to use GLM
//------------------------------------------------------------------------------
//#define VGIZMO_USES_GLM
// uncomment to use LeftHanded 
//
// This is used only in: lookAt / perspective / ortho / frustrum - functions
//      DX is LeftHanded, OpenGL is RightHanded
//
// Default ==> RightHanded
//------------------------------------------------------------------------------
//#define VGM_USES_LEFT_HAND_AXES

From v.2.1

// uncomment to avoid vgMath.h add folow line code:
//      using namespace vgm | glm; // if (!VGIZMO_USES_GLM | VGIZMO_USES_GLM)
//
// Automatically "using namespace" is added to the end vgMath.h:
//      it help to maintain compatibilty between vgMath & glm declaration types,
//      but can go in confict with other pre-exist data types in your project
//
// note: this is only if you use vgMath.h in your project, for your data types:
//       it have no effect for vGizmo | imGuIZMO internal use
//
// Default ==> vgMath.h add: using namespace vgm | glm;
//------------------------------------------------------------------------------
//#define VGM_DISABLE_AUTO_NAMESPACE
// uncomment to use HLSL name types (in addition!) 
//
// It add also the HLSL notation in addition to existing one:
//      alias types:
//          float  ==>  float2 / float3 / float4 / quat / float3x3 / float4x4
//      and more TEMPLATE (only!) alias:
//          double ==> double2 / double3 / double4 / dquat / double3x3 / double4x4
//          int    ==> int2 / int3 / int4
//          uint   ==> uint2 / uint3 / uint4
//
// Default ==> NO HLSL alia types defined
//------------------------------------------------------------------------------
//#define VGM_USES_HLSL_TYPES 
  • If your project grows you can upgrade/pass to glm, in any moment
  • My glChAoS.P project can switch from internal vgMath (VGIZMO_USES_TEMPLATE) to glm (VGIZMO_USES_GLM), and vice versa, only changing defines: you can examine it as example

vgmath's People

Contributors

brutpitt avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

stjordanis

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.