da1nerd / prism

A 3D game engine written in crystal
https://prism-api.netlify.com/
MIT License
98 stars 4 forks source link
3d-engine crystal game-engine opengl

Prism

GitHub release Build Status

This is a stable, though not completely baked, 3D game engine. Documentation is a little sparse right now, but hopefully the example linked below will help. Disclaimer: I barely know anything about game development much less game engine development. This has been a learn-as-i-go project. If you have ideas or suggestions I would love it if you opened an issue.

Goals

Demo

NOTE: this was recorded at 5fps, but runs at 60fps.

Peek 2020-04-29 09-53

You can find code for this demo at https://github.com/da1nerd/tutorial-game

Installation

Add this to your application's shard.yml:

dependencies:
  prism:
    github: da1nerd/prism

Install GLFW on your system

# on linux
sudo apt-get install libglfw3-dev

# on macOS
brew install glfw3

Install OpenGL

# on linux
sudo apt install mesa-common-dev

# on mac
# TODO: give install instructions

Usage

require "prism"

class Game < Prism::GameEngine
  def init
    # Cube
    # TODO: draw a box to look at

    # Sun light
    sun = Prism::Entity.new
    sun_color = Prism::Maths::Vector3f.new(0.2, 0.2, 0.2)
    sun.add Prism::PointLight.new(sun_color)
    sun.transform.move_to(0, 10000, -7000)
    add_entity sun

    # Camera
    add_entity Prism::GhostCamera.new
  end
end

Prism::Context.run("Hello World", Game.new)

Contributing

  1. Fork it (https://github.com/da1nerd/prism/fork)
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

Contributors

Special Thanks

This project was largely inspired by "The Benny Box" and his 3D Game Engine Tutorial. Thanks for all the good tutorials Benny!