Go 3D Game Engine http://g3n.rocks
Fork from https://github.com/g3n/engine

Daniel Salvadori 1947ea87d4 improved Skeleton.BoneMatrices() 7 gadi atpakaļ
animation 28c03973c2 fixed rotation channel to use spherical linear interpolation 7 gadi atpakaļ
audio ea066c75c4 Fix for FreeBSD 7 gadi atpakaļ
camera 221871a8d2 Merge pull request #60 from amyadzuki/patch-7 7 gadi atpakaļ
core 48a6bb9576 improved Node.SetMatrix() 7 gadi atpakaļ
experimental fc88461e90 fixed docs 7 gadi atpakaļ
geometry 61cb2ab048 improved geometry API 7 gadi atpakaļ
gls 28a5f9700e added new vbo attribute types 7 gadi atpakaļ
graphic 1947ea87d4 improved Skeleton.BoneMatrices() 7 gadi atpakaļ
gui fab9e465ab added DropDown.SetStyles() 7 gadi atpakaļ
light 77ea848ccd improved docs 7 gadi atpakaļ
loader ce7624a934 implemented glTF loader caching 7 gadi atpakaļ
material 0954644078 Merge branch 'master' into gltf 7 gadi atpakaļ
math32 161dbc58dd improved docs 7 gadi atpakaļ
renderer 9233aba005 implemented skinning and glTF loading of rigged meshes 7 gadi atpakaļ
text 84132e511c gofmt 7 gadi atpakaļ
texture 84132e511c gofmt 7 gadi atpakaļ
tools 77ea848ccd improved docs 7 gadi atpakaļ
util 2c872fee07 fixed generic camera SetAspect in application.go 7 gadi atpakaļ
window 02a25ef88b improve cursor loading 7 gadi atpakaļ
.gitattributes 60a4df0db5 mark audio/windows as linguist-vendored 7 gadi atpakaļ
LICENSE 3585b36aec first import 8 gadi atpakaļ
README.md dfd22c46c9 updated README.md 7 gadi atpakaļ

README.md

G3N Banner

<a href="https://godoc.org/github.com/g3n/engine"><img src="https://godoc.org/github.com/g3n/engine?status.svg" alt="Godoc"></img></a>
<a href="https://goreportcard.com/report/github.com/g3n/engine"><img src="https://goreportcard.com/badge/github.com/g3n/engine"  alt="Go Report Card"/></a>

G3N - Go 3D Game Engine

G3N (pronounced "gen") is a cross-platform OpenGL 3D game engine written in Go.

### To see G3N in action try the G3N demo or the Gokoban award winning game.

<img style="float: right;" src="https://raw.githubusercontent.com/g3n/g3nd/master/data/images/g3nd_screenshots.png" alt="G3ND In Action"/>

## Highlighted Projects

Gokoban - 3D Puzzle Game (1st place in the 2017 Gopher Game Jam)

## Dependencies

G3N requires Go 1.8+

The engine requires an OpenGL driver and a GCC-compatible C compiler to be installed.

On Unix-based systems the engine depends on some C libraries that can be installed using the appropriate distribution package manager.

  • For Ubuntu/Debian-like Linux distributions, install the following packages:
    • xorg-dev
    • libgl1-mesa-dev
    • libopenal1
    • libopenal-dev
    • libvorbis0a
    • libvorbis-dev
    • libvorbisfile3
  • For CentOS/Fedora-like Linux distributions, install the following packages:
    • xorg-x11-devel.x86_64
    • mesa-libGL.x86_64
    • mesa-libGL-devel.x86_64
    • openal-soft.x86_64
    • openal-soft-devel.x86_64
    • libvorbis.x86_64
    • libvorbis-devel.x86_64
  • For Windows, the necessary audio libraries sources and DLLs are supplied but they need to be installed manually. Please see Audio libraries for Windows for details. We tested the Windows build using the mingw-w64 toolchain.
  • For macOS, you should install the development files of OpenAL and Vorbis. If you are using Homebrew as your package manager, run: brew install libvorbis openal-soft

## Installation

The following command will download the engine along with all its Go dependencies:

go get -u github.com/g3n/engine/...

## Features

  • Cross-platform: Windows, Linux, and macOS
  • Integrated GUI (graphical user interface) with many widgets
  • Hierarchical scene graph - nodes can contain other nodes
  • 3D spatial audio via OpenAL (.wav, .ogg)
  • Real-time lighting: ambient, directional, point, and spot lights
  • Physically-based rendering: fresnel reflectance, geometric occlusion, microfacet distribution
  • Model loaders: glTF (.gltf, .glb), Wavefront OBJ (.obj), and COLLADA (.dae)
  • Geometry generators: box, sphere, cylinder, torus, etc...
  • Geometries support morph targets and multimaterials
  • Support for animated sprites based on sprite sheets
  • Perspective and ortographic cameras
  • Text image generation and support for TrueType fonts
  • Image textures can be loaded from GIF, PNG or JPEG files
  • Animation framework for position, rotation, and scale of objects
  • Support for user-created GLSL shaders: vertex, fragment, and geometry shaders
  • Integrated basic physics engine (experimental/incomplete)
  • Support for HiDPI displays

<img style="float: right;" src="https://github.com/g3n/g3n.github.io/raw/master/img/g3n_banner_small.png" alt="G3N Banner"/>

## Hello G3N

The code below is a basic "hello world" application (hellog3n) that shows a blue torus. You can download and install hellog3n via: go get -u github.com/g3n/demos/hellog3n

For more complex demos please see the G3N demo program.

  package main

  import (
      "github.com/g3n/engine/util/application"
      "github.com/g3n/engine/geometry"
      "github.com/g3n/engine/material"
      "github.com/g3n/engine/math32"
      "github.com/g3n/engine/graphic"
      "github.com/g3n/engine/light"
  )

  func main() {

      app, _ := application.Create(application.Options{
          Title:  "Hello G3N",
          Width:  800,
          Height: 600,
      })

      // Create a blue torus and add it to the scene
      geom := geometry.NewTorus(1, .4, 12, 32, math32.Pi*2)
      mat := material.NewPhong(math32.NewColor("DarkBlue"))
      torusMesh := graphic.NewMesh(geom, mat)
      app.Scene().Add(torusMesh)

      // Add lights to the scene
      ambientLight := light.NewAmbient(&math32.Color{1.0, 1.0, 1.0}, 0.8)
      app.Scene().Add(ambientLight)
      pointLight := light.NewPoint(&math32.Color{1, 1, 1}, 5.0)
      pointLight.SetPosition(1, 0, 2)
      app.Scene().Add(pointLight)

      // Add an axis helper to the scene
      axis := graphic.NewAxisHelper(0.5)
      app.Scene().Add(axis)

      app.CameraPersp().SetPosition(0, 0, 3)
      app.Run()
  }

<img style="float: right;" src="https://github.com/g3n/demos/blob/master/hellog3n/screenshot.png" alt="hellog3n Screenshot"/>

## Documentation

For the engine API reference, please see GoDoc.

Currently, the best way to learn how to use G3N is to look at the source code of the demos from G3ND. In the future we would like to have a "Getting Started" guide along with tutorials in the wiki.

## Contributing

If you find a bug or create a new feature you are encouraged to send pull requests!

## Community

Join our channel on Gophers Slack (Click here to register for Gophers Slack). It's a great way to have your questions answered quickly by the G3N community.