/ Games

An OpenGL 3D Game Engine written in Go

An OpenGL 3D Game Engine written in Go

G3N - Go 3D Game Engine

G3N (pronounced "gen") is an OpenGL 3D Game Engine written in Go. It can be used to write cross-platform Go applications that show rich and dynamic 3D representations - not just games. A basic integrated GUI framework is provided, and 3D spatial audio is supported through OpenAL.


Go 1.8+ is required. The engine also requires the system to have an OpenGL driver and a GCC-compatible C compiler.

On Unix-based systems the engine depends on some C libraries that can be installed using the appropriate distribution package manager. See below for OS specific requirements.


$ sudo apt-get install xorg-dev libgl1-mesa-dev libopenal1 libopenal-dev libvorbis0a libvorbis-dev libvorbisfile3


$ sudo dnf -y install xorg-x11-proto-devel mesa-libGL mesa-libGL-devel openal-soft openal-soft-devel libvorbis libvorbis-devel glfw-devel libXi-devel

CentOS 7

Enable the EPEL repository:

$ sudo yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

Then install the same packages as for Fedora - remember to use yum instead of dnf for the package installation command.


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 (you can download this file in particular).


Install the development files of OpenAL and Vorbis using Homebrew:

brew install libvorbis openal-soft


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

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


  • 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

G3N Banner

Hello G3N

The code below is a basic "hello world" application
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 (

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)

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

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

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

hellog3n Screenshot