Ruby bindings for CGLM, a high performance math library for OpenGL.
CGLM provides support for SIMD on CPUs that support it in order to deliver better performance. This requires the variables to be aligned to 8-, 16- and 32-byte boundaries, but this gem automatically handles this requirement so you don't have to think about that.
CGLM sports the following features:
- general purpose matrix operations (mat4, mat3)
- general purpose vector operations (cross, dot, rotate, proj, angle...)
- affine transforms
- matrix decomposition (extract rotation, scaling factor)
- optimized affine transform matrices (mul, rigid-body inverse)
- camera (lookat)
- projections (ortho, perspective)
- euler angles / yaw-pitch-roll to matrix
- extract euler angles
- frustum (extract view frustum planes, corners...)
- bounding box (AABB in Frustum (culling), crop, merge...)
- project, unproject
(Note: A few other features are available in the original C library, such as optional in-lining of all functions, which don't really translate to Ruby gems -- although such features are used by the code for the gem itself.)
Add this line to your application's Gemfile:
And then execute:
Or install it yourself as:
$ gem install cglm
CGLM module, or use the classes it defines directly:
include CGLM a = Vec3.new b = Vec3.new([1, 0, 0]) proj = Mat4.perspective(fovy: Math::PI / 4, aspect: 640.0 / 480.0) view = Mat4.rotate(Vec3.new([0, 1, 0], PI_4) model = Mat4.translate(Vec3.new([34, 57, 36])) mvp = proj * view * model
This gem provides two basic variants for almost every operation. Let's use
Vec3#add as an example. You can use the intuitive syntax:
result = a + b
This will work just fine, returning a new
Vec3. Or, in performance-critical situations, you may wish to directly specify a destination to place the result in:
result = Vec3.new loop do # avoid allocating a new Vec3 by reusing result a.add(b, result) end
The second syntax is perhaps a little less intuitive, but avoids creation of extra objects (because you specify them yourself), so you can more easily control your memory and garbage collection costs.
There are too many methods to list here, so you are encouraged to check out the project documentation.
After checking out the repo, run
bin/setup to install dependencies. Then, run
rake test to run the tests. You can also run
bin/console for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run
bundle exec rake install. To release a new version, update the version number in
version.rb, and then run
bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the
.gem file to rubygems.org.
Bug reports and pull requests are welcome on GitHub at https://github.com/sinisterchipmunk/cglm-ruby.
The gem is available as open source under the terms of the MIT License.