G3N (pronounced "gen") is a cross-platform OpenGL 3D game engine written in Go.
Gokoban - 3D Puzzle Game (1st place in the 2017 Gopher Game Jam)
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
The following command will download 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
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()
}
For the engine API reference, please see .
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.
If you find a bug or create a new feature you are encouraged to send pull requests!
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.